Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév
Tartalom 1 A Java alapjai 2 Java program írása 3 Alapvető elemek 4 Vezérlési szerkezetek 5 Gyakorlás
Tartalom 1 A Java alapjai 2 Java program írása 3 Alapvető elemek 4 Vezérlési szerkezetek 5 Gyakorlás
Tartalom 1 A Java alapjai 2 Java program írása 3 Alapvető elemek 4 Vezérlési szerkezetek 5 Gyakorlás
Tartalom 1 A Java alapjai 2 Java program írása 3 Alapvető elemek 4 Vezérlési szerkezetek 5 Gyakorlás
Tartalom 1 A Java alapjai 2 Java program írása 3 Alapvető elemek 4 Vezérlési szerkezetek 5 Gyakorlás
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
Történet, jellemzők James Gosling kezdte fejleszteni a Sun Microsystemsnél a 90-es évek elején Első kiadás 1995-ös, azóta sok minden változott, bővült a nyelv A Java 2 Platform, Standard Edition (SE) 5.0 2004-es Objektumorientált nyelv (primitív típusokon kívül minden az Object ősosztály leszármazottja) C++-szerű szintaxis a fordító bájtkódra fordít, a futtatásért a Java Virtual Machine (JVM) felel a bájtkód hordozható platformok között (Windows, Unix, Linux, Macintosh), ami nagyon nagy előny a programok relatíve lassúak: persze ez sokszor nem számít vagy nem érzékelhető
A nyelvről Garbage Collector (automatikus szemétgyűjtés) van Így nehéz elrontani a memória felszabadítást Néha azért felgyűlik a szemét Nincs memóriafelszabadító utasítás (mint a delete a C++ esetén) 8 primitív típus (boolean, char, byte, short, int, long, float, double) Az Object osztály (java.lang.object) minden további osztály őse Javadoc: viszonylag kényelmes dokumentációs kommentezést tesz lehetővé Nagy hangsúly van a kivételkezelésen
A nyelvről Garbage Collector (automatikus szemétgyűjtés) van Így nehéz elrontani a memória felszabadítást Néha azért felgyűlik a szemét Nincs memóriafelszabadító utasítás (mint a delete a C++ esetén) 8 primitív típus (boolean, char, byte, short, int, long, float, double) Az Object osztály (java.lang.object) minden további osztály őse Javadoc: viszonylag kényelmes dokumentációs kommentezést tesz lehetővé Nagy hangsúly van a kivételkezelésen
A nyelvről Garbage Collector (automatikus szemétgyűjtés) van Így nehéz elrontani a memória felszabadítást Néha azért felgyűlik a szemét Nincs memóriafelszabadító utasítás (mint a delete a C++ esetén) 8 primitív típus (boolean, char, byte, short, int, long, float, double) Az Object osztály (java.lang.object) minden további osztály őse Javadoc: viszonylag kényelmes dokumentációs kommentezést tesz lehetővé Nagy hangsúly van a kivételkezelésen
A nyelvről Garbage Collector (automatikus szemétgyűjtés) van Így nehéz elrontani a memória felszabadítást Néha azért felgyűlik a szemét Nincs memóriafelszabadító utasítás (mint a delete a C++ esetén) 8 primitív típus (boolean, char, byte, short, int, long, float, double) Az Object osztály (java.lang.object) minden további osztály őse Javadoc: viszonylag kényelmes dokumentációs kommentezést tesz lehetővé Nagy hangsúly van a kivételkezelésen
A nyelvről Garbage Collector (automatikus szemétgyűjtés) van Így nehéz elrontani a memória felszabadítást Néha azért felgyűlik a szemét Nincs memóriafelszabadító utasítás (mint a delete a C++ esetén) 8 primitív típus (boolean, char, byte, short, int, long, float, double) Az Object osztály (java.lang.object) minden további osztály őse Javadoc: viszonylag kényelmes dokumentációs kommentezést tesz lehetővé Nagy hangsúly van a kivételkezelésen
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Java program Egy java fájl tartalmaz egy azonos nevű osztályt (a FooProgram.java fájlban van egy FooProgram osztály) A függvények osztálydefiníción belül fordulhatnak elő Más osztály függvényeinek használatához importálni kell a megfelelő osztályt Fordításkor a FooProgram.java-ból készül egy FooProgram.class fájl ( javac paranccsal) Ha az osztálynak van main() metódusa (belépési pontja), akkor végrehajtható (a java paranccsal) Az osztályok úgynevezett package -ekbe (csomagokba) szerveződnek (pl. foo.gui, foo.engine, stb.) egy package-be tartozó osztályok látják egymást (nem kell importálni) egy package-be tartozó osztályok alapértelmezésben látják egymás adattagjait
Fordítás, futtatás (parancssor)(1) Fordítás javac paranccsal történik -d argumentummal megadható, hogy milyen könyvtárba kerüljenek a class fájlok Példa: javac HelloWorld.java (abszolút vagy relatív elérési út) Futtatás java parancs -cp argumentummal beállítható, hogy honnan vegye a class fájlokat Példa: java HelloWorld
Fordítás, futtatás (parancssor)(1) Fordítás javac paranccsal történik -d argumentummal megadható, hogy milyen könyvtárba kerüljenek a class fájlok Példa: javac HelloWorld.java (abszolút vagy relatív elérési út) Futtatás java parancs -cp argumentummal beállítható, hogy honnan vegye a class fájlokat Példa: java HelloWorld
Fordítás, futtatás (parancssor)(2) JavaDoc készítése javadoc paranccsal történik -d argumentummal megadható, hogy milyen könyvtárba kerüljön a dokumenáció -encoding argumentummal beállítható a karakterkódolás Példa: javadoc -d doc -encoding utf-8 Ha nem ismertek a parancsok be kell állítani Windows: set PATH=%PATH%;c:\Program Files\Java\jdk1.8.0_144\bin\ Linux: gedit /etc/profile export PATH=$PATH:/usr/java/jdk1.8.0_144/bin/
Fordítás, futtatás (parancssor)(2) JavaDoc készítése javadoc paranccsal történik -d argumentummal megadható, hogy milyen könyvtárba kerüljön a dokumenáció -encoding argumentummal beállítható a karakterkódolás Példa: javadoc -d doc -encoding utf-8 Ha nem ismertek a parancsok be kell állítani Windows: set PATH=%PATH%;c:\Program Files\Java\jdk1.8.0_144\bin\ Linux: gedit /etc/profile export PATH=$PATH:/usr/java/jdk1.8.0_144/bin/
Kódolási konvenció, dokumentáció Kódolási konvenció Fontos betartani a kódolási konvenciókat. Fő szempontok: olvashatóság, egyértelműség, értelmezhetőség Oracle által javasolt kódolási konvenciók a Java nyelvre: Itt található Dokumentáció Az előadás honlapja Java tutorial Java API doc
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Típusok, konverziók Típusok byte, short, int, long,float, double, char, boolean Csomagoló osztályok (Byte, Short...) oktálisan hexadecimálisan és tudományos módon is lehet értéket adni minden primitív és csomagolt típusból és bizonyos objektumokból lehet tömböt csinálni Változó definiálás boolean b = true; Konverzió A típusok közti bővítés automatikus A típusok közti szűkítés csak típuskényszerítéssel Az operátorok más nyelvből megszokottak (Hivatalos operátor lista)
Elágazások Kétirányú elágazás if (feltétel){} else if (feltétel){} else {} Többirányú elágazás switch (változó){ case érték: utasítás/utasítás block; break; case érték: utasítás/utasítás block; break; case érték: utasítás/utasítás block; break; default: utasítás/utasítás block; break; } Csak primitív típusokra működik
Elágazások Kétirányú elágazás if (feltétel){} else if (feltétel){} else {} Többirányú elágazás switch (változó){ case érték: utasítás/utasítás block; break; case érték: utasítás/utasítás block; break; case érték: utasítás/utasítás block; break; default: utasítás/utasítás block; break; } Csak primitív típusokra működik
Ciklusok Előltesztelő while (feltétel){} Hátultesztelő ciklus do {} while (feltétel) Lépésszámláló ciklus for (inicializálás; termináló feltétel; léptetés){} For-each for (T típusú változó : T típusú kollekció){}
Ciklusok Előltesztelő while (feltétel){} Hátultesztelő ciklus do {} while (feltétel) Lépésszámláló ciklus for (inicializálás; termináló feltétel; léptetés){} For-each for (T típusú változó : T típusú kollekció){}
Ciklusok Előltesztelő while (feltétel){} Hátultesztelő ciklus do {} while (feltétel) Lépésszámláló ciklus for (inicializálás; termináló feltétel; léptetés){} For-each for (T típusú változó : T típusú kollekció){}
Ciklusok Előltesztelő while (feltétel){} Hátultesztelő ciklus do {} while (feltétel) Lépésszámláló ciklus for (inicializálás; termináló feltétel; léptetés){} For-each for (T típusú változó : T típusú kollekció){}
Ugró utasítások Continue Továbblép a ciklus következő iterációjára Break Kilép a ciklusból és a ciklus utáni első vezérlési szerkezetet hajtja végre Return Visszatérés egy függvényből vagy eljárásból
Ugró utasítások Continue Továbblép a ciklus következő iterációjára Break Kilép a ciklusból és a ciklus utáni első vezérlési szerkezetet hajtja végre Return Visszatérés egy függvényből vagy eljárásból
Ugró utasítások Continue Továbblép a ciklus következő iterációjára Break Kilép a ciklusból és a ciklus utáni első vezérlési szerkezetet hajtja végre Return Visszatérés egy függvényből vagy eljárásból
1. feladat Töltse le a Main.java forrásfájlt és fordítsa le! Elemezze a működését, figyelje meg az egyes nyelvi elemeket!
2. feladat Egészítse ki a forrást egy olyan programrészlettel amely egy tetszőleges számig csak a 3-mal és 5-tel osztható számok összegét számolja ki! (A megoldáshoz használjon ciklust és feltételes utasítást.)
3. feladat Keresse meg a hibát az Increment.java és a Clock.java programokban és javítsa ki, hogy a forrás forduljon és fusson!