Java Programozás 2. Ea: Java alapok. Ismétlés ++

Hasonló dokumentumok
Java I. A Java programozási nyelv

Java I. A Java programozási nyelv

Java II. I A Java programozási nyelv alapelemei

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

A Java nyelv. Bevezetés, alapok Elek Tibor

Szoftvertechnológia alapjai Java előadások

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek JAVA EA+GY 1. gyakolat

Bevezetés a Java programozási nyelvbe

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A C# programozási nyelv alapjai

JAVA ALKALMAZÁSOK 1. ELŐADÁS 2/22/2017 1

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Bevezetés a Java programozási nyelvbe

A Java programozási nyelv

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

1. Egyszerű (primitív) típusok. 2. Referencia típusok

OOP: Java 1.Gy: Java alapok

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozási nyelv Java

Java programozási nyelv 6. rész Java a gyakorlatban

Szoftvertervezés és -fejlesztés I.

Osztályok. 4. gyakorlat

I. Bevezetés. 1. ábra A Java "logója"

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Készítette: Nagy Tibor István

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

A C programozási nyelv I. Bevezetés

Bevezetés a C++ programozási nyelvbe

A C programozási nyelv I. Bevezetés

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Java programozási nyelv

OOP: Java 8.Gy: Abstract osztályok, interfészek

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Informatika terméktervezőknek

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozási technológia I.

1. Jelölje meg az összes igaz állítást a következők közül!

Java programozási nyelv 5. rész Osztályok III.

Occam 1. Készítette: Szabó Éva

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

A C# PROGRAMOZÁSI NYELV

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

JAVA PROGRAMOZÁS 2.ELŐADÁS

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Adatbázis és szoftverfejlesztés elmélet

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozási nyelvek Java

Programozási nyelvek (ADA)

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Programozás I. Első ZH segédlet

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

GYAKORLATIAS JAVA MINTA

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

JAVA SE/ME tanfolyam tematika

Segédanyag: Java alkalmazások gyakorlat

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Vezérlési szerkezetek

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

OOP: Java 8.Gy: Gyakorlás

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

OOP #14 (referencia-elv)

Már megismert fogalmak áttekintése

S z á m í t ó g é p e s a l a p i s m e r e t e k

Abstract osztályok és interface-ek. 7-dik gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Készítette: Nagy Tibor István

Kifejezések. Kozsik Tamás. December 11, 2016

Java programozási nyelv

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java III. I I. Osztálydefiníció (Bevezetés)

A JavaScript főbb tulajdonságai

Java III. I I. Osztálydefiníció (Bevezetés)

Programozás II. 2. Dr. Iványi Péter

Web-technológia PHP-vel

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Pénzügyi algoritmusok

Programozási nyelvek Java

AWK programozás, minták, vezérlési szerkezetek

7. K: JAVA alapok Konzultáció

Imperatív és procedurális programozás a Javában

Átírás:

Java Programozás 2. Ea: Java alapok Ismétlés ++ 110/1 B ITv: MAN 2018.02.05

A Java nyelv jellemzői Interpreteres Forrás file fordítás Byte kódú file-ok (class file-ok, nem gépikód, nem futtatható, egy új forrásnyelv) Interpreter: betölti, soronként (?!) fordítja és végrehajtja a Java Virtuális Gép (JVM) Következmények: A Bytekódú file hordozható Webes környezetben is használható Az interpreter program beágyazható más programokba vagy eszközökbe (böngésző, telefon) Lassúság a compileres nyelvekhez képest!!! 110/2

Hárombetűsek: JDK, JVM, JRE F.java SZ SZ F.class 110/3 F Fájl SZ Szoftver H Hardver SZ H

A Java nyelv jellemzői Objektum orientált nyelv Megvalósítja az OOP alapelveit A bonyodalmakat okozó részeket kihagyja, pl:többszörös öröklődés (nehezebb megvalósítás, kódújrafelhasználás) operátor overloading (félreérthető használat, kevésbé olvasható kód) Szigorúan OOP (nincsen osztályon kívüli deklaráció, utasítás) Hasonlóság a C++-hoz A szintaktika teljesen C++-szerű Nincsenek mutatók Gazdag osztály könyvtár (csomagok) 110/4 Kb. 5000 osztály illetve interfész a JDK 9-ben

A Java nyelv verziói 1990-1992: a SUN belső project-je James Gosling vezetésével (+Patrick Naughton, Mike Sheridan, ) Programnyelv a Set Top Box-okhoz Igény: platform-független technológia ne függjön a doboz hardverétől annak programozása Egyik akkori nyelv sem volt megfelelő, ezért terveztek egy újat. A projekt (és vele az új nyelv) aztán lassan elhalt. 110/5

A Java nyelv verziói 1995: az Internet rohamos terjedése újra felvetette a platform-független technológia szükségességét. Újraéledt a project, de általánosabb célkitűzéssel. Eredménye egy Oak névre keresztelt programnyelv, ez volt a Java nyelv alapja, első verziója Mivel az Oak név foglalt volt, átnevezték a programnyelvet Java-ra, a fejlesztő környezetet JDK-ra (Java Development Kit). Java szigetén készítették az első kávét, amit Java kávénak neveztek, ez alapján nevezték el Java-nak az első platformfüggetlen programnyelvet, és lett a nyelv jelképe egy csésze kávé. 110/6

A SUN Green project fejlesztő csapata 1997-ben 110/7

A Java nyelv verziói 1995.05.27 1996.01.23 1997.02.19 1998.12.08 Java Alfa JDK 1.0 Oak JDK 1.1 J2SE 1.2 Playground Java nyelv alapok Java API WebRunner (applet futtatáshoz) JVM JRE JDK JDBC AWT, RMI JavaBeans InnerClass Swing, Collections Just in Time compiler J2SE, J2EE, J2ME 2000.05.08 J2SE 1.3 J2SE 1.4 J2SE 5.0 Java SE 6 Kestrel Merlin Tiger Mustang JavaSound Java Naming and Directory Interface Java Platform Debugger 110/8 2002.02.06 XML support JDBC 3.0 Regex Exception chaining 2004.09.30 For-each loop Generics Autoboxing Enums 2006.12.11 JDBC 4.0 Java Compiler API Annotations GSS, Kerberos, LDAP support

110/9

A Java nyelv verziói 2009.04.20: az Oracle megveszi a Sun Microsystems-t. Az ez utáni verziókat az Oracle fejleszti 2011.07.28 Java SE 7 Dolphin String in Switch New exception handling java.nio package 2014.03.18 Java SE 8 Spider Lambda Expressions Pipelines and Streams Date and Time API 2017.09.27 JDK 9 Jigshow Modularity JVM options jshell 110/10

110/11

Kávé bébi! Minden class fájl hexa kódja így kezdődik! 110/12

A Java nyelv jellemzői Magas szintű programozási nyelv: platform-független általános célú teljesen objektum-orientált egyszerű interpretált (de speciális módon) elosztott (distributed) robosztus biztonságos hordozható többszálú (multithreaded) A C++ ismeretében született, annak formalizmusát tekintette mintának 110/13 A C++ hátrányait igyekezett kiküszöbölni

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A platform olyan hardver vagy szoftverkörnyezet, ahol a programok futnak. A legtöbb platform a hardvert és az operációs rendszert jelenti. A Java platform annyiban különbözik a legtöbb más platformtól, hogy teljesen szoftverplatform, és más hardver alapú platformokra épül. A Java platform két komponensből áll: Java API Java VM 110/14

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A Java API igen sok (több ezer) használatra kész szoftverkomponenst tartalmaz: csomagokba szervezett osztályokat és interfészeket. A Java Virtual Machine egy program, amely az előállított platform-független bájt kódot lefuttatja az adott hardveren. A Java bájtkódot gépi kóddá alakítja a Java VM. Minden Java értelmező, akár a fejlesztőkörnyezet, akár egy böngészőben futó applet, tartalmaz Java VM-et a futtatáshoz. 110/15

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/16 Olyan programozási nyelv, amit széleskörűen fel lehet használni szoftverek írására. Tetszőleges témakörben készíthetők programok, a Java támogatja: a hálózatok használatát, adatbázis kezelést, nemzetközi programozást. A java alkalmas: asztali alkalmazások, appletek (böngészőben futtatható programok), szervletek (dinamikus tartalmat generáló, szerver oldalon futó programok) készítésére.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A Java C / C++ szerű nyelv, de nem vette át azokat a nyelvi elemeket, amelyek veszélyes konstrukciókat engednek meg (pl. többszörös öröklődés, pointerek, operátor overloading ) Megvalósítja az összes OOP alapelvet: Adatok és a hozzájuk kapcsolódó tevékenységek egységbe zárása (encapsulation) Alapegység: osztály, melynek építőkövei: adattagok, metódusok. 110/17

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/18 Információ rejtés: Egy objektum adatai a külvilág számára hozzáférhetetlenek. Egy objektum a külvilággal csak az interfészén keresztül tarthatja a kapcsolatot. (Interface: a külvilág számára elérhető módszerek metódusok együttese.) A módszerek implementációja rejtett. Öröklődés (inheritance): az osztályok egy részét már meglévő osztályok továbbfejlesztésével hozzuk létre, úgy, hogy további adattagokkal, illetve metódusokkal bővítjük. Többalakúság (polimorphism): A származtatott osztályokban lehetnek ugyanolyan elnevezésű, de más tevékenységű metódusok, mint az ős osztályban => áttekinthető kód, nem kell az elnevezéseket variálnunk.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A Java nyelv a szintaxisát főleg a C és a C++ nyelvektől örökölte, viszont sokkal egyszerűbb objektummodellel rendelkezik, mint a C++. A Java nyelv könnyen megtanulható. Ez nem jelenti azt, hogy jó Java programok írása is könnyű feladat! Nagyon nagyméretű a programozási környezethez tartozó standard könyvtár készlet! Ez hatékonyabbá teszi a programozást (sok kódot nem kell nekünk megírni), de nehezíti a program megtanulását. 110/19

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A Java egyszerre fordított és interpretált A legtöbb programozási nyelv esetén fordítást vagy értelmezést hajtunk végre, mielőtt a program futna a gépünkön. A Java esetén a kettőnek egy különös keverékét használjuk. Először a forrásprogramot (myprogram.java) a fordító (compiler, javac.exe) egy közbülső nyelvre fordítva Java bájtkódot (myprogram.class) állít elő, és ezt a platform-független kódot értelmezi és futtatja a Java VM (interpreter, java.exe). 110/20

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/21 A fordítás egy alkalommal történik, az értelmezés pedig minden alkalommal, ahányszor a program végrehajtódik. A Java bájtkódot gépi kóddá alakítja a Java VM. Minden Java értelmező, akár a fejlesztőkörnyezet, akár egy böngészőben futó applet, tartalmaz Java VM-et a futtatáshoz. A fordítást és értelmezést is alkalmazó hibrid megoldás manapság egyre nagyobb népszerűségnek örvend. A Microsoft.Net platformja sok architektúrális elemet vett át a Javától, és a web hagyományos értelmező megoldásai ma már sokszor előfordítással is kombinálhatók.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/22 A Java alkalmas elosztott rendszerek kialakítására. Elosztott rendszernek nevezzük azt a kommunikációs csatornán keresztül összekötött, autonóm műveletvégző egységekből álló számítógépes rendszert, amely a komponensek összehangolásával képes informatikai feladatok közös megoldására. Az RMI (Remote Method Invocation), azaz távoli metódushívás egy olyan eszköz a Java nyelvben, mely lehetővé teszi más VM-ben elhelyezkedő objektumok metódusainak meghívását.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) Az RMI rendszert úgy tervezték, hogy a hálózaton elosztott objektumok viselkedése hasonló legyen a helyi objektumok viselkedésével, de ne egyezzen meg, a teljes transzparencia biztosítása nem volt cél. A rendszer elrejti a kommunikációt végző részt, és a metódushívás hasonló a helyi, azaz lokális objektumok metódusainak meghívásával, bizonyos megszorításokkal és kötöttségekkel. 110/23

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/24 Robusztus egy nyelv, ha megakadályozza vagy futás közben kiszűri a programozási hibákat. A robusztusság nyelvi szinten a szigorú, statikus típusosságban jelenik meg. Minden adatnak fordításkor jól definiált típusa van, nincsenek automatikus konverziók, az explicit konverzió csak kompatibilis típusoknál sikerül, egyébként legkésőbb futtatáskor programhibát (exception) okoz. A dinamikus szemétgyűjtés megkímél bennünket a hasznos memória elszivárgásától (memory leak).

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/25 Biztonságos egy nyelv, ha megakadályozza, hogy rosszindulatú programok kerüljenek a rendszerünkbe. A biztonság egyik alappillére a robusztusság, a fordító csak korrektül viselkedő programokat ad ki magából. A VM betöltője ellenőrzi, hogy az elindított program megfelel-e a nyelv szabályainak. Ha az elindított programok átjutottak a betöltő konzisztencia-ellenőrzésén, akkor a virtuális gép felügyelete alatt kezdenek futni, ez ellenőrzi, hogy a programok csak engedélyezett tevékenységet hajtanak végre.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) Szigorúan szabályozott - vagy teljesen tiltott - például helyi állományokhoz való hozzáférés, tiltott más helyi programok indítása, jelentősen korlátozott a hálózaton felvehető kapcsolatok címzettje. A Java SE 6-ban megjelent GSS, Kerberos, LDAP elosztott azonosítási rendszerek, és a meglévő MD5, SHA titkosítási rendszerek szintén növelik a biztonságot. 110/26

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/27 Ahhoz, hogy a lefordított program változtatás nélkül futtatható legyen különböző hardver architektúrákon, a fordítóprogram a programot nem egy konkrét processzor gépi kódjára, hanem egy képzeletbeli hardver (VM) utasításrendszerére fordítja le. Az így létrejött közbülső, ún. Byte kódot töltjük le a célarchitektúrára, ahol a virtuális gépet megvalósító program értelmezi és hajtja végre. Egy új architektúrán akkor futtathatók a Java programok, ha már implementálták rá a virtuális gépet, beleértve a rendszerkönyvtárakat is.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A virtuális gépet C-ben írták, a kód a POSIX.1 szabványnak megfelelő operációs rendszert tételez fel, így viszonylag kis munkával hordozható. A hordozhatóság érdekes aspektusa a fejlesztői környezet hordozhatósága. A környezet egyes részei, mint például a fordítóprogram, nyomkövető eszközök, vagy maga a HotJava böngésző is Java nyelven íródott. Viszont ha a Java programok hordozhatók, akkor egy pillanat alatt az egész környezet is átkerülhet egy új architektúrára. 110/28

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) 110/29 A programok jelentős része párhuzamosan végrehajtható részletekre - vezérlési szálakra - bontható. Így jobban kihasználható a számítógép központi egysége, a programok a külső - például felhasználói - eseményekre gyorsabban reagálhatnak. Az egymással kommunikáló, viszonylag laza kapcsolatban álló szálakra bontott feladat könnyebben áttekinthető, megvalósítható és optimalizálható. A többszálú programozáshoz a Java nyelvi szinten biztosítja az automatikus kölcsönös kizárást: szinkronizált (synchronized) módszerek vagy utasítások, valamint a szálak létrehozásához, szinkronizációjának megvalósításához a rendszerkönyvtár tartalmaz egy ún. Thread osztályt.

A Java nyelv jellemzői Platform-független Általános célú Teljesen objektum-orientált Egyszerű Interpretált (de speciális módon) Elosztott (distributed) Robosztus Biztonságos Hordozható Többszálú (multithreaded) A Java virtuális gép a szálak futtatásához prioritáson alapuló preemptív - de nem feltétlenül időosztásos - ütemezőt tartalmaz. A többszálú programozás támogatása ellenére a Java nyelv valósidejű programok írására nem alkalmas. A virtuális gép nem tartalmaz határidős ütemezési képességeket, de még a prioritás-öröklést sem ismeri, a jelenleg implementált szemétgyűjtő algoritmus sem alkalmas valósidejű futtatásra - bár ez utóbbi a virtuális gép "magánügye", a programok változtatása nélkül könnyen lecserélhető. 110/30

Java fejlesztő környezetek A SUN az alábbi részekre (kiadásokra) osztja a Java alapú szabványos eszközöket: J2SE - Java 2 Platform, Standard Edition J2EE - Java 2 Platform, Enterprise Edition J2ME - Java 2 Platform, Micro Edition 110/31

Java fejlesztő környezetek J2SE Standard Edition Általános fejlesztési környezet, mindazon alapszolgáltatások, amelyek Java programok készítését teszik lehetővé. Legfontosabb részei maga a Java nyelv, alapvető hálózati szolgáltatások, RMI, applet és a szervlet, lokális komponensek (JavaBeans), GUI (platform-független felhasználói interfész elemek), és még nagyon-nagyon sok más... 110/32

Java fejlesztő környezetek J2EE - Enterprise Edition A J2SE szolgáltatásait is tartalmazza, ezen felül a legfontosabb részei: komponens szemléletű fejlesztés a nagyméretű alkalmazások készítését támogatja Web szolgáltatás alapú alkalmazások készítése biztonságos, robosztus rendszerek fejlesztésének eszközei J2ME - Micro Edition Kis erőforrásokkal rendelkező rendszerekre optimalizált Telefonok, vezeték nélküli eszközök, beágyazott rendszerek stb. fejlesztéséhez 110/33

Teszt 1. Tegye időrendbe az eseményeket! Kezdje a legkorábbival!? 110/34

Teszt 2. Milyen fejlesztő környezetek léteztek 2017-ben? Java SE JDK, Java SE JRE, Java ME SDK, Java EE SDK Java SE JDK, Java SE JRE Java SE JDK, Java ME SDK, Java EE SDK Java JDK, Java JRE Java JDK 110/35

A Java program felépítése A számítógépes program megmondja egy számítógépnek, hogy mit csináljon, jellemző módon azt, hogy az adatokkal milyen műveleteket végezzen. A számítógépes program egy programnyelven írt algoritmus, azaz bizonyos egzakt feltételeket, követelményeket (előre definiáltság, egyértelmű végrehajthatóság, stb.) kielégítő utasítássorozat. A Java program logikailag kizárólag osztályokból és interfészekből áll. Az osztályok (és interfészek) csomagokba (névtérhez hasonló fogalom) szervezhetők. 110/36

A Java program felépítése A Java program logikailag kizárólag osztályokból és interfészekből áll. Az osztályok (és interfészek) csomagokba (névtérhez hasonló fogalom) szervezhetők. Fizikailag: Az elkészítés szempontjából.java kiterjesztésű fájlok, melyek megfelelnek a nyelvi követelményeknek A fordító (compiler) szempontjából.java kiterjesztésű forrás fájl(ok), melyekből egy vagy több.class fájl készül A végrehajtás szempontjából (VM).class file-okból áll. A class file-ok lehetnek egy mappában, de jar vagy zip fájlba tömörítve, sőt adatbázisban tárolva is. 110/37

A Java program felépítése Forrás file szerkezete: csomag deklaráció import deklarációk osztály, interfész definíciók (ezek közül egy publikus!) Sorrend fontos! package sajat; import java.lang.*; public class Hello { public static void main(string[ ] args) { System.out.println( Helló világ ); } } 110/38

Csomag fogalma, használata Csomag: az osztály tárolási helye a fájlrendszerben Kettős rendszer: Gyári (fejlesztő környezet) könyvtárak Felhasználó által definiált könyvtárak 110/39

Csomag fogalma, használata Gyári (fejlesztő környezet) könyvtárak: Installáláskor jönnek létre A kialakított szerkezetnek megfelelően lehet elérni az egyes osztályokat 110/40

Csomag fogalma, használata pl. java.util.scanner osztály használata: java.util.scanner sc = new java.util.scanner(system.in); import java.util.scanner;... Scanner sc = new Scanner(System.in); import: jelzés a fordítónak, hogy a megadott könyvtárban keresse a hivatkozott objektumot, emiatt nem kell mindig kiírni az osztály elérési útvonalát. 110/41

Csomag fogalma, használata Felhasználó által definiált könyvtárak: Adott az a könyvtár, amiben dolgozunk, ahová az elkészült osztályok alapértelmezésként kerülnek (ez máshol van, mint a fejlesztő környezet könyvtárai) Ez alatt is létre hozhatók alkönyvtárak (csomagok), így szabályozható az egyes osztályok láthatósága, vagyis növelhető az adatbiztonság Pl.: ha nem adunk meg láthatósági módosítót egy adattagra, az ugyanabban a csomagban (ugyanabban a mappában) lévő osztályok látják az adattagot, a más csomagban lévők nem 110/42

Csomag fogalma, használata Felhasználó által definiált könyvtárak: Létrehozása: package m1; Pl.: 110/43 package m1; public class Szamol {... } package m2; public class Adat {... } Eredmény: hiába vannak félnyilvános adattagok az Adat osztályban, a Szamol osztályból nem láthatók!

Csomag fogalma, használata A felhasználó által létrehozott csomagok használata: package m1; public class Szamol { m2.adat a = new m2.adat(); } package m1; import m2; public class Szamol { Adat a = new Adat(); } Használatuk módja megegyezik a gyári csomagok használatával. 110/44

Csomag fogalma, használata Logikailag összetartozó osztályok (interfészek) Az elnevezés hierarchikus, de a csomagok tartalma nem! pl. java.awt, java.awt.event csomagok java.awt.event csomag nem része a java.awt-nek! az import java.awt.* az awt csomagban lévő összes osztályt importálja, de az alcsomagok tartalmát nem! Két különböző csomagban lehetnek azonos nevű osztályok (interfészek)! Az osztály nevére mindig teljes névvel (minősített névvel) kell hivatkozni! csomagnév.osztálynév (pl. java.util.date) 110/45

Csomag fogalma, használata java sajat.cs1.skprg; (Az SkPrg.class futtatása parancssorból) A cs1 nevű csomagot a Java rendszer egy környezeti változóval megadott keresési útvonalon keresi. A környezeti változó neve CLASSPATH Beállítása: set classpath= c:\java9; myjava Lehetséges a csomagoknak a tömörített módú tárolása is, ZIP vagy JAR fájlban set classpath=.; jdbcdriver.jar; skcsomagok.zip Ha nincs megadva a classpath, alapértéke az aktuális könyvtár Tehát a cs1 csomagot a VM az alábbi helyeken keresi: az aktuális munkakönyvtár alatti sajat alkönyvtárban a CLASSPATH által definiált könyvtárak sajat alkönyvtárában a CLASSPATH által definiált zip/jar fájlok sajat alkönyvtárában 110/46

Csomag fogalma, használata java sajat.cs1.skprg; (Az SkPrg.class futtatása parancssorból) A classpath megadható a VM-nek közvetlenül a parancssorból: Pl. Ha a sajat mappában állunk: java classpath.. sajat.cs1.skprg (.. a szülő könyvtárra utal) Tömörített fájlok közvetlen használatához meg kell adnunk a fájlok nevét a classpath-ban. Pl. Ha az SkPrg programhoz szükség van egy jdbcdriver.jar fájlra, amit a sajat\drivers mappában tartunk, a munkakönyvtárból kiadott helyes indító parancs: java classpath sajat/drivers/jdbcdriver.jar sajat.cs1.skprg 110/47

Csomag fogalma, használata sajat.cs1.skprog.java; A compiler számára fontos, hogy a forrás fájlokat hol keresse. Erre való a SOURCEPATH paraméter. A sourcepath logikája megegyezik a classpath változóval Fordításkor megadható az is, hogy a bájtkódok (.class) hová kerüljenek, erre való a d <classdir> Használatuk parancssorból: Pl. A munkakönyvtárban állunk. A forrásfájlok az src alkönyvtárban vannak, a lefordított állományok a bin alkönyvtárba kerüljenek: javac sourcepath src d bin sajat.cs1.skprog A csomagszerkezetnek léteznie kell az scr könyvtár alatt, és fordításkor (ha nem létezik) létrejön a bin könyvtár alá is! Az elkészült program indítása: java bin/sajat/cs1/skprg 110/48

Import objektumok keresési helyének megadása Utasítás a fordítónak, hogy mely csomagokban keresse a kódban hivatkozott objektumokat (osztályok, interfészek) Ha megadunk egy csomagot, a kódban nem kell kiírni az abban elérhető osztályok teljes elérési útvonalát. Példák import a.b.c.osztálynév; (konkrét osztály, teljes eléréssel megadva) import a.b.c.*; (a c csomag összes osztálya) Minden fordítási egységbe automatikusan importálódik a java.lang csomag összes osztálya. Import nélkül is használhatók az osztályok java.util.scanner sc = new java.util.scanner (System.in); 110/49

Teszt 3. A java.util csomagban kb. 100 db osztály van. Válassza ki a helyes választ a fordítás után keletkező bájtkód méretével kapcsolatban! 1 import java.util.scanner; public class Alma { Scanner sc = new Scanner (System.in); } 2 import java.util.*; public class Alma { Scanner sc = new Scanner (System.in); } Egyforma méretű bájtkód keletkezik Az 1. kód bájtkódja kisebb lesz, mint a 2. kódé 110/50

Teszt 4. import java.awt.*; Importáltuk a java.awt csomag teljes tartalmát. Szükséges külön importálni a java.awt.evet csomag tartalmát is? Igen, a * csak az awt csomagban lévő osztályokat importálja, az alcsomagok tartalmát nem. Nem, a * importálja az awt csomag teljes tartalmát, vagyis az alatta lévő csomagokban található osztályokat is. 110/51

Alapvető osztálykönyvtárak Csomag java.awt java.awt.event javax.swing java.util java.io java.text javax.applet java.lang java.math java.net java.rmi java.sql 110/52 Tartalma, feladata Alapvető grafikai elemek Grafikus elemek eseménykezelői További grafikai elemek Fontos segédosztályok (kollekciók, szkenner ) Kommunikáció Formátumok, formázó osztályok Appletek Alapvető nyelvi elemek Matematikai osztályok Hálózatkezelés Távoli metódushívás Adatbázis-kezelés

Fejlesztő környezetek Minimális: Java SDK (letölthető a www.oracle.com oldalról) Legfrissebb verzió (2018.01.01) 9.0.1 Egy tetszőleges szövegszerkesztő (Notepad) Kicsit fejlettebb: Notepad++ (notepad-plus-plus.org/download) Integrált: NetBeans (netbeans.org/downloads) Eclipse (www.eclipse.org/downloads) Oracle Jdeveloper (www.oracle.com/technetwork/ developer-tools/jdev/downloads) Javelin (stepaheadsoftware.com/products/javelin) JProfiler (www.ej-technologies.com/products/jprofiler) 110/53

110/54

Hello Java program public class Hello { public static void main(string args[]) { System.out.print("Hello "); if (args.length == 0) System.out.println("World!"); else System.out.println(args[0] + "!"); } } Kötelezően egy Hello.java nevű fájlban kell lennie! 110/55

Fejlesztési lépések 1. Forrásfájl (Hello.java) megírása egy tetszőleges szövegszerkesztővel 2. Fordítás: javac Hello.java Abban a könyvtárban célszerű kiadni, ahol a forrásfájl van A fordítás eredménye a Hello.class bájtkód 3. Futtatás: java Hello BitMan A Hello.class fájlt futtatja javac Hello.java java Hello BitMan public class Hello { public static void main(string args[]) { System.out.print("Hello "); if (args.length == 0) System.out.println("World!"); else System.out.println(args[0] + "!"); } } Hello.java 110/56 CAFE BABE 37DA 4107 FAC4 660D 00F1 300BD 1FF0 35BB 337DD 239C Hello.class Java VM 01001 Hello BitMan!

A Java nyelv alapelemei 110/57

Azonosítók A Java a Unicode karakterkészletet használja, tehát akár ékezetes azonosítókat is használhatunk. Az azonosító betűvel kezdődő és betűvel vagy számmal folytatódó karaktersorozat. Az _ és a $ is a betűk közé sorolandó. Az azonosítóban használható karakterekre a Character.isJavaIdentifierPart(char) true-t ad eredményül Character.isJavaIdentifierFirst(char) megengedett első karakter vizsgálatához A betűk bármelyik karakterkészletből származhatnak. Az azonosító hossza tetszőleges. A JAVA is kis- és nagybetű érzékeny (case sensitive). Kulcsszavak, valamint néhány további foglalt szó nem lehet azonosító 110/58

Kulcsszavak abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while További foglalt szavak true false goto null 110/59

Azonosítók használata Változókhoz, metódusokhoz: Kisbetűvel írt, egyszerű, tartalomra utaló nevek: alma, sebesség, kiír(), szoroz() Az azonosítókat úgy tagoljuk, hogy az összetett szavak kezdőbetűit nagybetűvel, a többit kisbetűvel írjuk: maxsebességhatár, átlagérték() Csomagokhoz: Ékezet nélkül: sajat.forras, masik.kepek Konstansokhoz: Nagy betűkkel írt név: MAX_ÉRTÉK Osztályokhoz: Nagybetűvel kezdjük: Embere, AlapadatBeolvasóRutin 110/60

A Java nyelv típusai Elemi típusok, primitív típusok, érték típusok Egy egyszerű értéket képesek tárolni: számot, karaktert vagy logikai értéket. A változó neve közvetlenül egy értéket jelent. Minden típus előjeles, nincs előjel nélküli (unsigned) Típusnév boolean char byte short int long float 110/61 double Jelentése (tartalma) logikai 1 darab unicode karakter 1 byte egész 2 byte egész 4 byte egész 8 byte egész 4 byte lebegőpontos 8 byte lebegőpontos

Teszt 5. Milyen értékeket vehet fel egy byte típusú változó? 0 65535-32768 32767 0 256-128 127-256 255 110/62

A Java nyelv típusai Referencia típusok Osztály Interfész Speciális szintaktikával rendelkező osztály típusok Tömb Felsorolás (enum) A referencia-változó más nyelvek mutató vagy memóriacím fogalmára hasonlít. Az objektum neve (objectname) nem egy közvetlen értéket, hanem csak egy referenciát jelent. Az értéket közvetetten, a referencián keresztül érhetjük el. 110/63

Literálok (Konstansok) boolean literálok: true, false char literálok: B, \n, \u00ff Egész literálok: int literál: 5, -48, 012 (okt), 0x5F (hexa) long literál: 12345678901, 4L, 4l, 0x2DL byte, short literál: csak konverzióval (short)5 Lebegőpontos literál: double literál: 5.4, 0.12e3, 0.1E-2D float literál: 4.21e2F, 0.2E5f Szöveg (String) literál: szöveg Referencia literál: null 110/64

Lokális változók használata Deklarálás: adattípus azonosító; pl: int a; Lehet kezdőértéke is (inicializálás), pl: int a = 5; Ha nem adunk kezdőértéket, null-szerű értékkel jön létre Deklarálni bárhol lehet, de csak metóduson belül, de nemcsak egy blokk elején Hatóköre: a deklarálási ponttól az adott blokk végéig Adattag (tagváltozó): osztályon belül bárhol használható Lokális változó: metóduson vagy blokkon belül használható metódus (konstruktor) paramétere catch paramétere 110/65

Készülünk a vizsgára 6. 1. Helyes vagy hibás az alábbi kód? 2. Mit ír (vagy írna) ki a kód? public class Teszt { public static void main(string args[ ]) { int a = 2; int b = c = 3; System.out.print(""+a+b+c); } } 110/66

Lokális változók használata Nincs globális változó! Egyszerű típusú lokális változó definíciója egyben helyfoglalást is jelent. Végleges változó (nem változhat az értéke): final int fv = 17; Kötelező inicializálni! 110/67

Teszt 7. Melyik korrekt változónév? 2var var2 _var _3_ #var $var 110/68

Egydimenziós tömb Tömb: azonos típusú adatokat tartalmazó adatszerkezet Deklarálás: adattípus [ ] azonosító; int [ ] szamok; adattípus azonosító [ ]; int szamok [ ]; Helyfoglalás a tömb elemeinek (méret megadása): azonosító = new adattípus[elemek_száma]; szamok = new int [12]; Egy lépésben: adattípus [ ] azonosító = new adattípus[elemek_száma]; int [ ] szamok = new int [12]; Deklarálás és azonnali kezdőérték adás: int [ ] szamok = {2,0,4,3,7,5,2}; 110/69

Egydimenziós tömb Hivatkozás egy elemre: azonosító[sorszám], pl: a[2] = 4; Az indexelés 0-tól kezdődik! A tömb elemeinek a számát az azonosító.length utasítással kérdezhetjük le: int db = szamok.length; Több dimenziós tömb: pl: int mx [ ] [ ] = new int [4] [3]; mx [0] [2] = -5; int px[ ] [ ] = { {3,2}{0,0}{1,4} }; 110/70

Teszt 8. Mit ír ki a kód? public class Teszt { public static void main(string args[ ]) { int [ ][ ] szamok = { {1,2,3}, {0,-1,-2}, {4,5,6} }; System.out.println(szamok[1][1]); } } 110/71

Operátorok Operátor Hely Jelentés Operandusok [] index Tömböknél, az index egész. minősítés Referenciában, tagok között () fgv. hívás Függvény, paraméter ++ Növelés utólag numerikus -- Csökkentés utólag numerikus ++ Növelés előtte numerikus -- Csökkentés előtte numerikus + - előjelek numerikus ~ bit. tagadás egész! log. tagadás boolean () Típus konverzió Típus, kifejezés new példányosítás típus 110/72

Operátorok Operátor Hely Jelentés Operandusok * / % szorz, oszt, mod numerikus + - összead, kivon numerikus + string összefüzés String << bitléptetés egész >> bitléptetés egész >>> bitléptetés egész < <= reláció numerikus > >= reláció numerikus instanceof típus vizsg. referencia, típus == egyenlőség tetszőleges!= nem egy. tetszőleges 110/73

Operátorok Operátor Hely Jelentés Operandusok & bit and, v. log and egész v. boolean ^ bit xor, v. log xor egész v. boolean bit or, v. log or egész v. boolean && log and (röv) boolean log or (röv) boolean?: feltételes op boolean, tetsz. =, +=, értékadás változó, kifejezés Fontos (érdekes): referencián végezhető műveletek:., (típus), +(csak String), instanceof, ==,!=, = MÁS NEM! 110/74

Teszt 9. 1. Helyes vagy hibás az alábbi kód? 2. Mit ír (vagy írna) ki a kód? public class Teszt { public static void main(string args[ ]) { int a =2, b=5; System.out.print(++a*4+b+ +b++); } } 110/75

Kifejezések A kifejezések hajtják végre a program feladatát. A kifejezéseket többek között változók kiszámítására, értékük beállítására és a program futásának ellenőrzésére használjuk. A kifejezéseknek kétféle feladata van: végrehajtani a számításokat, amelyeket a kifejezés alkotóelemi határoznak meg, visszaadni a számítás végeredményét. A kifejezés változók, operátorok és metódushívások olyan sorozata (a nyelv szintaxisát figyelembe véve) amely egy értéket ad vissza. 110/76

Kifejezések kiértékelési sorrendje A kifejezések kiértékelési sorrendjét meghatározza: 1. Zárójelezés 2. Operandusok prioritása 3. Azonos prioritás esetén balról-jobbra szabály, kivétel az értékadás, amely jobbról-balra értékelődik ki. A kifejezésekben a metódushívások ("függvény hívások") sorrendje is a kiértékelés sorrendjét követi. 110/77

Kifejezések kiértékelési sorrendje Zárójelezés: x + y / 5 Ha határozattan nem jelezzük a sorrendet, amely szerint akarjuk, hogy az összetett kifejezés kiértékelődjön, akkor a sorrendet az operátorok precedenciája fogja meghatározni. A magasabb precedenciával rendelkező operátorok hajtódnak végre elsőként. Például az osztás operátor magasabb precedenciájú, mint az összeadás. Így a következő két kifejezés megegyezik egymással: x + y / 5 és x + (y / 5) Zárójelek használatával megváltoztathatjuk a kiértékelés sorrendjét: (x + y) / 5 110/78

Operátorok precedencia (elsőbbségi) szintje 110/79 Típus Operátorok postfix expr++ expr-- unáris ++expr --expr +expr -expr ~! multiplikatív * / % additív + - léptetés << >> >>> relációs < > <= >= instanceof egyenlőség ==!= bitenkénti és & bitenkénti kizáró vagy ^ bitenkénti vagy logikai és && logikai vagy feltételes? : értékadás = += -= *= /= %= &= ^= = <<= >>= >>>=

Operátorok precedencia (elsőbbségi) szintje A táblázatban legfelül a legnagyobb precedenciával rendelkező operátor található. A magasabb precedenciával rendelkező operátorok előbb hajtódnak végre, mint az alacsonyabbal rendelkezők. Az azonos szinten elhelyezkedő operátorok azonos precedenciával rendelkeznek. Ha azonos precedenciájú operátorok szerepelnek egy kifejezésben, akkor szabályozni kell, hogy melyik értékelődjön ki elsőként (zárójelek). Minden bináris operátor, kivéve az értékadó operátorokat balról jobbra hajtódnak végre. Az értékadó operátorok jobbról balra hajtódnak végre. 110/80

Típuskonverzió A Java erősen típusos nyelv, a fordító a típus kompatibilitásának ellenőrzését minden lehetséges esetben elvégzi. Egy típus kompatibilis egy másik típussal, ha az adott környezetben helyettesíthető vele. Bizonyos műveletek végrehajtása előtt az operandus típusát konvertálni kell egy másik típussá. A típuskonverzió kiváltási módja lehet: Implicit (automatikus) a fordító automatikusan elvégzi Explicit (kényszerített) a programozónak kell azt kikényszeríteni. A konverzió iránya lehet: Szűkítő 110/81 Bővítő

Típuskonverzió Elemi típusok konverziója Automatikus konverzió a bővebb típus irányába 110/82 long float: Jegyvesztés lehetséges! boolean numerikus, numerikus boolean: Nincs! char numerikus, numerikus char: Nincs! Automatikus konverzió műveletvégzéskor A műveletekben a byte és short int-ként szerepel, a float double-ként. A két operandusú műveletekben a szűkebb típus a bővebb típusként vesz részt, eredmény a bővebb típus

Típuskonverzió Elemi típusok konverziója Automatikus konverzió műveletvégzéskor Egy operandusú műveletek esetén: Ha az operandus típusa int-nél szűkebb (byte, short), akkor az operandust int típusúvá konvertálja, egyébként nem konvertál. A float típus double típusként vesz részt a műveletekben Két operandusú műveletek esetén: Mindkét operandust a kettő közül a bővebb, de minimum int típussá konvertálja. 110/83

Típuskonverzió Példák automatikus konverzióra Kifejezés Eredeti típusok Konvertált típusok Kifejezés típusa 1b * 1s byte * short int * int int 1b + 1b byte + byte int + int int 1b + 1 byte + int int + int int 1i / 1L int / long long / long long 1f + 1i float + int float + float float 1L 1s long short long long long 1L * 1.0 long * double double * double double 1c / 1b char / byte int / int int 1d + 1f double + float double + double double 110/84

Típuskonverzió Elemi típusok kikényszerített konverziói típus konverziós operátorral: Típuskényszerítésről beszélünk, ha a programozó egy kifejezés értékére ráerőltet egy típust: (<típus>) <kifejezés> int a = (int) 5.8; short b = (short) A ; int c = (int) true; double x = 5 / (double) 2; 110/85

Típuskonverzió A konverzió iránya double d; int i = 5; d = i; int konvertálása double típussá implicit módon. Ez bővítés. int i; d = 79.4; i = (int) d; int i; d = 79.4; i = d; double konvertálása int típussá explicit módon. Ez szűkítés. Szintaktikai hiba!!! 110/86

A Java nyelv utasításai Blokk Lokális változó deklaráció Üres utasítás Kifejezés utasítás Elágazások (if, switch) Assert utasítás Ciklusok (while, do, for) Ugró, vezérlésátadó utasítások (break, continue, return) Kivételek kezelésével kapcsolatos utasítások (throw, trycatch) 110/87

A Java nyelv utasításai Blokk { } utasítás1 utasítás2 stb. Határai: { } A blokk utasításait sorban hajtja végre A blokkban levő utasítások bármilyenek lehetnek, akár blokk utasítások is Lehet olyan blokk amiben nincs utasítás 110/88

A Java nyelv utasításai Lokális változó deklaráció Szintaktika (nem tömb esetén): típus elem; típus elem, elem; Ahol az elem egy azonosító, vagy egy azonosító=inicializáláls kifejezés Pl. int a; String b= alma,c; int d, e=1; Értéke, ha nem inicializáljuk definiálatlan. A fordító hibát jelez, ha hivatkozunk rá értékadás előtt. Hatásköre a blokk, amelyben deklarálták, azt elhagyva el is pusztul (referencia változók esetén?) 110/89 Elfedi a külső blokk egyező nevű azonosítóit

A Java nyelv utasításai Üres utasítás ; Kifejezés utasítás kifejezés; Lehet:értékadás, increment, decrement, függvény hívás, objektum létrehozás pl. a+=2; De: a+2; Hibás! 110/90

A Java nyelv utasításai Feltételes utasítások: IF A feltétel csak logikai kifejezés lehet if (feltétel) { utasítások } else if (feltétel) { utasítások } else { utasítások } 110/91

Teszt 10. Helyes vagy hibás az alábbi kód? public class Teszt { public static void main(string args[ ]) { int i=1; if (i) System.out.println("Oké!"); } } 110/92

Teszt 11. Mit ír ki a kód? public class Teszt { public static void main(string args[ ]) { int nap=5, perc=3, d=0; if (nap>=2 && perc!=0) { d++; if (nap>5 perc!=3) d--; else d++; } System.out.println(d); } } 110/93

A Java nyelv utasításai Feltételes utasítás: SWITCH Az érték típusa csak: byte, short, int, char, ezek burkoló osztályai, vagy enum lehet Az értékkel megegyező címke a belépési pont Kiugrás a break utasítás hatására A default címke nem kötelező, de ez a belépési pont, ha egyik címkével sem egyezik az érték 110/94 switch (érték) { case címke1: utasítás; break; case címke2: utasítás; break; case címke3: utasítás; break; default: utasítás; break; }

Készülünk a vizsgára public class Teszt { public static void main(string args[ ]) { int szam = 7; switch (szam) { case 1: case 3: case 5: case 7: case 9: System.out.println("Páratlan"); break; case 2: case 4: case 6: case 8: System.out.println("Páros"); break; default: System.out.println("Csak 1 és 9 között működök!"); } } } 110/95 12. 1. Helyes vagy hibás a kód? 2. Mit ír (vagy írna) ki a kód?

A Java nyelv utasításai Kódtesztelés: ASSERT utasítás Tesztesetek írásakor a rendszerben lévő metódusokat hívjuk, és az assert segítségével ellenőrizzük, hogy a kívánt eredményt kapjuk-e assert x.szamol(2,2) == 8; Ha az assert után megfogalmazott logikai kifejezés hamis eredményt ad, a környezet AssertionError exception-t dob. Alaphelyzetben futtatáskor az assert működése ki van kapcsolva, így a VM átlépi az assert kódokat. Bekapcsolás: java ea ProgramNeve 110/96

A Java nyelv utasításai Ciklus: WHILE while (feltétel) { utasítások } A feltétel csak boolean eredmény adó kifejezés lehet A ciklusmag lehet egyetlen utasítás, de lehet blokk is Elöltesztelő, igaz feltétel esetén ismétli a ciklusmagot 110/97

A Java nyelv utasításai Ciklus: DO do { utasítások } while (feltétel) A feltétel csak boolean eredmény adó kifejezés lehet A ciklusmag lehet egyetlen utasítás, de lehet blokk is Hátultesztelő, igaz feltétel esetén ismétli a ciklusmagot 110/98

A Java nyelv utasításai Ciklus: FOR Hagyományos alak Java 5.0-tól továbbfejlesztett változat tömbökhöz, gyűjteményekhez for (inicializálás; feltétel; növekmény) { utasítás(ok) } Az inicializálás egy olyan kifejezés, amely kezdőértéket ad a ciklusnak A feltétel kifejezés azt határozza meg, hogy meddig kell a ciklust ismételni A növekmény egy olyan kifejezés, amely minden 110/99 ismétlődés után végrehajtódik a ciklusban

Teszt 13. Melyik ciklus hajtódik végre legalább egyszer a következő deklaráció mellett? int a = 10, b = 12; while (a >=10 && b!=0) {...} do{... } while (a==b b<0); for (int i=5; i<0; i--){...} while (a<0 (a+b)%2 == 0 ) 110/100

Készülünk a vizsgára 14. 1. Helyes vagy hibás az alábbi kód? 2. Mit ír (vagy írna) ki a kód? public class Teszt { public static void main(string args[ ]) { for (int k=0; k<=6; k++) { int s = k%5; s *= s; } System.out.print(s+" "); } } 110/101

Teszt 15. Jelölje meg az összes igaz állítást! A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag A do és while kulcsszavak közötti egyetlen utasítást nem kell blokkba tenni A for utasítás fejében kötelező ciklusváltozót deklarálni A for elöltesztelő ciklus, emiatt lehet, hogy egyszer sem hajtódik végre a ciklusmag 110/102

A Java nyelv utasításai Ciklus: FOR Továbbfejlesztett változat tömbökhöz, gyűjteményekhez for (elemtípus elem : tároló) { utasítás(ok) } Működés: az elem rendre felveszi a tároló elemeit és minden érték mellett végrehajtódik az utasítás. Példakód: 110/103 int [ ] tomb = {1,3,5,6,8}; for (int a : tomb) { System.out.println(a); }

A Java nyelv utasításai Ugró, vezérlésátadó utasítások: BREAK Kilép a blokkból amiben szerepel, és a blokkot követő utasításra adódik a vezérlés. Csak switch, while, do, for utasításában levő blokkban használható. Switch esetén szerepe, hogy ne kerülhessen át a végrehajtás a következő case-re. Ciklusok esetén, hogy a ciklusból kilépjünk. break címke; utasítás Egymásba ágyazott blokkok esetén a belső blokkban levő break a címkével megjelölt külső területre léphet ki, így tetszőleges helyen folytatódhat a program végrehajtása 110/104

A Java nyelv utasításai Ugró, vezérlésátadó utasítások: CONTINUE Csak ciklusok blokkjában használható. A blokk végére ugrik, azaz a ciklusmag hátralevő részét átugorja. continue címke; utasítás A break-hez hasonlóan egymásba ágyazott ciklusoknál használható 110/105

A Java nyelv utasításai Ugró, vezérlésátadó utasítások: RETURN Kilép a függvényből és a függvény hívás utáni utasításon folytatódik a végrehajtás. Csak voidfüggvényekben használható. return kifejezés; utasítás Kilép a függvényből és a függvény hívás helyére behelyettesítődik a kifejezés értéke. Csak nem void függvényekben használható. 110/106

A Java nyelv utasításai Kivételek kezelésével kapcsolatos utasítások THROW: kivétel dobása, generálása TRY: védett kód kijelölése CATCH: kivétel elkapása, a blokkban definiált utasítások végrehajtása FINALLY: végül, akár volt kivétel, akár nem, lefut. String s1 = sc.nextline(); //Beolvasás scannerről try { int szam = Integer.parseInt(s1); System.out.println("A szám: "+szam); } catch (NumberFormatException nfe) { System.out.println("Hiba: "+nfe.getmessage()); } 110/107

Teszt 16. Hány darab x-et ír ki a kód? public class Program { public static void main(string[ ] args) { for (int i=1; i<4; i++) for (int j=i; j<=4; j++) System.out.print("x"); } } 110/108

Felhasznált irodalom Ficsor Lajos elektronikus jegyzetei Elek Tibor elektronikus jegyzetei chortle.ccsu.edu/ Java course oldal anyagai www.tutorialspoint.com/java oldal anyagai prog.hu oldal anyagai www.journaldev.com/1789/java-reflection-example-tutorial http://tutorials.jenkov.com/ oldal anyagai http://tutorials.jenkov.com/nyékiné G. Judit (szerk.): JAVA 2 útikalauz programozóknak, ELTE TTK Hallgatói Alapítvány, Budapest, 1999 Daniel J. Berg, J. Steven Fritzinger: JAVA felsőfokon,wiley, 1999 Joshua Bloch: Hatékony Java, 2008 110/109

VÉGE VÉGE 110/110