A Java programozási nyelvSoós Sándor 1/34 Java programozási nyelv A nyelv alapjai Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor szeptember
A Java programozási nyelvSoós Sándor 2/34 Java információ források ● ttp://java.lap.hu/ ttp://java.lap.hu/ ● ttp://java.sun.com/ ttp://java.sun.com/ ● ttp://java.sun.com/j2se/1.5.0/docs/api ttp://java.sun.com/j2se/1.5.0/docs/api – Java 2 Platform, Standard Edition, v1.5.0 API Specification – angol nyelvű referencia a Java osztályairól (online) ● ttp://java.sun.com/j2se/1.5.0/download.jsp ttp://java.sun.com/j2se/1.5.0/download.jsp – Download Java 2 Platform Standard Edition 5.0 ● ttp://java.sun.com/docs/books/tutorial/index.html ttp://java.sun.com/docs/books/tutorial/index.html – angol nyelvű Java oktató (on-line) ● ttp://java.sun.com/docs/books/tutorial/download/tutorial.zip ttp://java.sun.com/docs/books/tutorial/download/tutorial.zip – angol nyelvű Java tutorial (letölthető)
A Java programozási nyelvSoós Sándor 3/34 A Java rendszer telepítése ● Mire van szükség a Java-ban történő programozáshoz? – Java 2 Platform, Standard Edition ● Ingyenesen letölthető a ttp://java.sun.com/j2se/1.5.0/download.jsp címről. ttp://java.sun.com/j2se/1.5.0/download.jsp ● Az JDK-t kell letölteni, nem a JRE (runtime) változatot! – Tetszőleges editor (szövegszerkesztő), ami képes formázás nélküli tiszta szövegfile-okat kezelni. ● Alternatív lehetőség: integrált fejlesztő környezetek – NetBeans, letölthető a fenti címről – Eclipse, letölthető a ww.eclipse.org címről.ww.eclipse.org – FreeJava, letölthető a ttp://belovai.uw.hu/ címről.ttp://belovai.uw.hu/ ● CLASSPATH környezeti változó beállítása – Az itt felsorolt könyvtárakban keresi a fordító az osztályokat. – Érdemes beletenni az aktuális könyvtárat (.)
A Java programozási nyelvSoós Sándor 4/34 A Java jellemzői ● Hordozható, platformfüggetlen – forráskód és bájtkód szinten ● Tisztán objektumorientált – csak osztályok, illetve objektumok léteznek ● Szabványos osztálykönyvtár ● Szintaktikája a C++ -on alapszik.
A Java programozási nyelvSoós Sándor 5/34 A Java család ● JavaScript – HTML-be ágyazott forrásszöveg – korlátozott eszközkészlet – ezzel nem foglalkozunk ebben a tárgyban ● Java Applet – Böngészőben futó bináris program, felhasználhatja a böngésző program által nyújtott szolgáltatásokat – HTML file-ból indított bájtkód ● Java Alkalmazás – önállóan fut a Java Virtuális Gép alatt
A Java programozási nyelvSoós Sándor 6/34 A Java programozási modell Java alkalmazás Forrásszöveg *.java file Forrásszöveg *.java file javac.exe fordító (compiler) javac.exe fordító (compiler) Bájtkód, bytecode *.class file Bájtkód, bytecode *.class file Java Virtuális Gép – Java Virtual Machine (JVM) Windows, Linux, Unix, mobiltelefon, stb. bármilyen eszköz, amire létezik Java Virtuális Gép Java Virtuális Gép – Java Virtual Machine (JVM) Windows, Linux, Unix, mobiltelefon, stb. bármilyen eszköz, amire létezik Java Virtuális Gép
A Java programozási nyelvSoós Sándor 7/34 A Java programozási modell Java kisalkalmazás (Applet) Forrásszöveg *.java file Forrásszöveg *.java file javac.exe fordító (compiler) javac.exe fordító (compiler) Bájtkód, bytecode *.class file Bájtkód, bytecode *.class file Java kompatibilis böngésző program bármilyen eszköz, amire létezik megfelelő böngésző Java kompatibilis böngésző program bármilyen eszköz, amire létezik megfelelő böngésző
A Java programozási nyelvSoós Sándor 8/34 A Java programozási modell JavaScript Forrásszöveg *.html fileba ágyazva Forrásszöveg *.html fileba ágyazva JavaScript kompatibilis böngésző program bármilyen eszköz, amire létezik megfelelő böngésző JavaScript kompatibilis böngésző program bármilyen eszköz, amire létezik megfelelő böngésző
A Java programozási nyelvSoós Sándor 9/34 Az első alkalmazás ● Forrásszöveg (HelloVilag.java): public class HelloVilag { public static void main(String[] args) { System.out.println("Hello Világ"); } ● Fordítás: javac HelloVilag.java ● Futtatás: java HelloVilag
A Java programozási nyelvSoós Sándor 10/34 Az első kisalkalmazás, applet ● Forrásszöveg (HelloVilagApplet.java): import java.awt.*; import java.applet.Applet; public class HelloVilagApplet extends Applet { public void paint(Graphics g){ g.drawRect(25, 2, 90, 25); g.drawString("Hello Világ", 50, 20); } ● Fordítás: javac HelloVilagApplet.java
A Java programozási nyelvSoós Sándor 11/34 Az első kisalkalmazás HTML ● Forrásszöveg (HelloVilagApplet.html): Hello Világ Applet Ha a böngésző nem támogatja a Java Appleteket, akkor ez a szöveg fog megjelenni! ● Megtekintés: appletviewer HelloVilagApplet.html
A Java programozási nyelvSoós Sándor 12/34 Az első grafikus alkalmazás ● Forrásszöveg (HelloVilag2.java): import javax.swing.JOptionPane; public class HelloVilag2 { public static void main( String args[] ) { JOptionPane.showMessageDialog( null, "Hello Világ!" ); System.exit( 0 ); }
A Java programozási nyelvSoós Sándor 13/34 A 2. grafikus alkalmazás, adatbevitel ● Forrásszöveg (Addition.java): Nézzük meg az Addition.java fájlt!
A Java programozási nyelvSoós Sándor 14/34 A Java nyelv alapjai 1. ● Megjegyzés (comment) – egysoros megjegyzés: // jeltől a sor végéig – hosszabb megjegyzés: /*... */ – dokumentációs megjegyzés (a javadoc program használja): /**... */
A Java programozási nyelvSoós Sándor 15/34 A Java nyelv alapjai 2. ● Karakterkészlet – ASCII helyett Unicode karakterkészlet – 8 bithelyett16 bit – minden Unicode karakter használható a teljes forrásszövegben, akár az azonosítókban is, ha a környezet támogatja – óvatosan használni!!!
A Java programozási nyelvSoós Sándor 16/34 A Java nyelv alapjai 3. ● Azonosítók – Betűvel kezdődik – betűvel vagy számmal folytatódik – Betűnek számít a $ és az _ jel valamint az ékezetes magánhangzók is. – Case-sensitive, azaz különböznek a kis- és nagybetűk – Az azonosítók hossza nincs korlátozva – A nyelv kulcsszavai nem lehetnek azonosítók – Példák: ● egészszám, _változó, $dollár, CiklusVáltozó, stb.
A Java programozási nyelvSoós Sándor 17/34 A Java nyelv alapjai 4. Egyszerű típusok ● a szabvány rögzíti az ábrázolási módot és a méretet, nem az implementáció ● hagyományos típusként és osztályként is használhatók ● osztályként a MIN_VALUE és a MAX_VALUE konstansok definiálják a határokat ● a Float és Double esetén van egy POSITIVE_INFINITY, NEGATIVE_INFINITY és egy NaN (Not a Number) konstans is. egyszerű típusosztályleírás booleanBooleanlogikai típus (true, false) charCharacter16 bites Unicode karakter byteInteger8 bites egész szám ( ) shortInteger16 bit, ( ) intInteger32 bit ( ) longLong64 bit ( ) floatFloat32 bit (-3, E , E+38) doubleDouble64 bit (-1, E ) egyszerű típusosztályleírás booleanBooleanlogikai típus (true, false) charCharacter16 bites Unicode karakter byteInteger8 bites egész szám ( ) shortInteger16 bit, ( ) intInteger32 bit ( ) longLong64 bit ( ) floatFloat32 bit (-3, E , E+38) doubleDouble64 bit (-1, E )
A Java programozási nyelvSoós Sándor 18/34 A Java nyelv alapjai 5. Literálok ● Objektumok: null. Bármely objektumreferenciának értékül adható ● Logikai értékek: true, false ● Egész számok: – 0 kezdetű számok oktális (8-as számrendszer), pl – 0x kezdetű számok hexadecimális (16-os számrendszer), pl. 0xff – minden más szám decimális számrendszerben lesz értelmezve, pl. 255 – egy egész szám után írt l vagy L betű long típust deklarál ● Lebegőpontos számok: – decimális számként adhatók meg tizedesponttal és e vagy E exponenssel – ez önmagában double típust jelent, f vagy F végződéssel lehet float típust deklarálni, pl. 3.14, , 12.3e4 ● Karakterek: aposztrófok között kell megadni, pl. 'a', 'Z' – escape szekvenciák, mint a C nyelvben, lásd a következő oldalon! ● Szövegek (String): idézőjelek között kell megadni, pl. “Helló Világ”
A Java programozási nyelvSoós Sándor 19/34 Escape szekvenciák ● KódLeírás ● \nújsor ● \ttabulátor ● \begy karakter vissza, törlés ● \r“kocsi” vissza, soremelés nélkül ● \flapdobás ● \\\ karakter ● \'' karakter, aposztróf ● \”“ karakter, idézőjel ● \oookarakter oktális számrendszerben ● \uhhhhUnicode karakter hexadecimálisan (0-0xffff)
A Java programozási nyelvSoós Sándor 20/34 Változódeklaráció, kezdőértékadás ● Mint a C/C++ nyelvben, pl. int x, y; ● Kezdőérték adható az = operátorral, pl. int x=1; ● A lokális változók nem kapnak automatikusan kezdőértéket! ● Az osztályok adatmezői a következő kezdőértéket kapják: TípusKezdőérték boolean false char '\u0000' byte, short, int, long 0 float, double 0.0 objektum null
A Java programozási nyelvSoós Sándor 21/34 Tömbök ● A C/C++ nyelvvel ellentétben ez igazi típus, nem pointer ● A tömbök indexelése 0-val kezdődik ● Tömb deklarációja a [] jellel történik a típus vagy a változó neve után: int[] EgeszTomb, tomb; // mindkettő tömb int egeszszam, tomb[]; // skalár és tömb – ez egy tetszőleges méretű tömböt deklarál, amit a new operátorral fogunk létrehozni: tomb = new int[20]; ● A tömb ismeri a saját méretét, amit a length mezővel le is lehet kérdezni. System.out.println(tomb.length); ● Indexeléskor a tömb ellenőrzi az indexet, hiba esetén IndexOutOfBoundsException kivétel váltódik ki.
A Java programozási nyelvSoós Sándor 22/34 Többdimenziós tömbök ● Nincsen többdimenziós tömb, de egy tömbnek lehetnek tömb elemei, akár különböző méretűek is. Például: int[][] tomb = new int[3][]; // 3 tömbből álló tömb for (int i = 0; i < tomb.length; i++) { tomb[i] = new int[i+1]; for (int j=0; j < tomb[i].length; j++) tomb[i][j] = 0; }
A Java programozási nyelvSoós Sándor 23/34 Példa többdimenziós tömbre public class tomb { public static void main(String[] args) { int[][] tomb = new int[10][]; // 10 tömbből álló tömb int szamlalo = 9; for (int i = 0; i < tomb.length; i++) { tomb[i] = new int[i+1]; for (int j = 0; j < tomb[i].length; j++) tomb[i][j] = ++szamlalo; } for (int i = 0; i < tomb.length; i++) { for (int j = 0; j < tomb[i].length; j++) System.out.print( tomb[i][j] + " " ); System.out.println( ); } }
A Java programozási nyelvSoós Sándor 24/34 Az előző program kimenete A folytatáshoz nyomjon meg egy billentyűt...
A Java programozási nyelvSoós Sándor 25/34 Operátorok ● +, -, *, /, % +, -, *, /, maradék ● ++, -- prefix és postfix formában ● +, - előjel ● >, >=, <, <=, ==, !=relációs operátorok ● &&, ||logikai ÉS, VAGY, a második operandust csak szükség esetén értékeli ki ● &, |logikai ÉS, VAGY, mindkét operandust mindig kiértékeli ● !logikai NEM ● ^logikai kizáró VAGY, (XOR) ● >bitenkénti léptetés balra, jobbra (előjelbittel) ● >>>bitenkénti léptetés jobbra (0 lép be) ● &, |, ^, !bitenkénti ÉS, VAGY, Kizáró VAGY, NEM ● =, +=, -=, *=, /=, %=, &=, |=, ^=, >=, >>>=
A Java programozási nyelvSoós Sándor 26/34 Egyéb operátorok Oper.PéldaLeírás ?:felt ? kif1 : kif2ha felt igaz, akkor kif1, egyébként kif2 []típus[], vált[]deklarál egy tömbváltozót []típus[op1]létrehoz egy op1 elemű tömböt a new-val együtt []op1[op2]indexelés, az op1 tömb op2-1 -dik eleme.op1.op2mezőhivatkozás, op1 objektum, vagy osztály op2 eleme ()op1(params)metódus deklaráció, vagy hívás (type)(type) op1típuskonverzió, op1-et type típusúra konvertálja newnew op1új objektum, vagy tömb létrehozása op1 instanceof op2igaz, ha op1 az op2 egy példánya
A Java programozási nyelvSoós Sándor 27/34 Sztringek kezelése ● C nyelv – nincsen igazi sztring típus – char*-gal valósítjuk meg – Veszélyes! ● Java nyelv – nyelvi szinten valósítja meg a sztringek kezelését – konstans sztringek kezelése: String osztály – változó sztringek kezelése: StringBuffer osztály
A Java programozási nyelvSoós Sándor 28/34 String osztály ● Konstans sztringek kezelésére szolgál. Egyszeri értékadás után nem lehet módosítani. ● String objektum létrehozása, különböző konstruktorokkal: – Explicit konstruktor hívással: String s1 = new String(); String s2 = new String("Ez " " sztring!"); – Implicit konstruktor hívással: String s1 = "NYME FMK"; String s2 = s1 + " INF. INT. " ; – Karaktertömbből: char[] karaktertomb = {'S', 'o', 'p', 'r', 'o', 'n'}; String s3 = new String(karaktertomb); // "Sopron" String s4 = new String(karaktertomb, 2, 3); // "pro"
A Java programozási nyelvSoós Sándor 29/34 String osztály - Konverziók ● String.valueOf metódus: – boolean, char, double, float, int, long típusoknál értelemszerűen – char[] esetén uaz. mint az előző dián a konstruktoroknál. (DE! A valueOf nem csinál másolatot, a copyValueOf igen!) – Object esetén: ● ha az objektum null, akkor "null" ● egyébként meghívja az osztály toString metódusát, minden osztály maga definiálhatja ezt a metódust – Például: boolean log = false; char ch = 'X'; double pi = 3.14; String s5 = String.valueOf(log) + String.valueOf(ch) + String.valueOf(pi); // s5 = "falseX3.14" ● Implicit konverzió: az egyszerű osztályok toString metódusával. Lásd az előző dia piros számait!
A Java programozási nyelvSoós Sándor 30/34 String osztály A tartalom elérése ● Egy karakter elérése: charAt metódus char ch = s3.charAt(2); // ch = 'p' (s3="Sopron") char ch2 = "Sopron".charAt(0); // ch2 = 'S' ● Két sztring összehasonlítása: equals, equalsIgnoreCase metódus boolean b1 = "alma".equals("ALMA"); // false boolean b2 = "alma".equalsIgnoreCase("ALMA"); // true – Az == a referenciákat hasonlítja össze, nem a tartalmat! ● Két sztring lexikografikus sorrendje: compareTo metódus 0ha a két sztring azonos negatívha az aktuális példány a kisebb pozitívha az aktuális példány a nagyobb int i = "Gyár".compareTo("Győr"); // i = +2 – de az abszolút érték nem definiált (+0, -0)! ● Keresés: indexOf, lastIndexOf, startsWith, endsWith metódus
A Java programozási nyelvSoós Sándor 31/34 String osztály Keresés ● Karakter vagy sztring keresése: indexOf metódus int index1 = "kukuriku".indexOf('u'); // 1 int index2 = "kukuriku".indexOf('u', 2); // 3 // a 2. indexű elemtől indul a keresés int index3 = "kukuriku".indexOf("ku"); // 0 int index4 = "kukuriku".indexOf("ka"); // -1 ● Keresés hátulról: lastIndexOf metódus int index5 = "kukuriku".lastIndexOf("ku"); // 6 ● Így kezdődik-e a sztring: startsWith metódus boolean start = "file.java".startsWith("fi"); // true ● Így végződik-e a sztring: endsWith metódus boolean vege = "file.java".endsWith(".jav"); // false
A Java programozási nyelvSoós Sándor 32/34 String osztály Egyéb műveletek ● A sztring hossza: length metódus int len = "Sopron".length(); // len = 6 ● Kis-, nagybetű váltás: toLowerCase, toUpperCase metódus String vegyes = "Kicsi És nAgYbEtŰk Vegyesen"; String kicsi = vegyes.toLowerCase(); String nagy = vegyes.toUpperCase(); ● Betűcsere: replace metódus ● Részsztring: substring metódus (tól, ig, az ig. karakter már nem lesz benne) String kacsa = kicsi.substring(0, 5).replace('i', 'a'); ● Vezető és záró white space-ek eltávolítása: trim metódus String s = " abcd "; String lenyeg = s.trim(); // lenyeg = "abcd" ● A kiinduló sztring ezekkel a metódusokkal sem változik meg!
A Java programozási nyelvSoós Sándor 33/34 StringBuffer osztály ● Változtatható és hosszú sztringek kezelésére szolgál. ● Dinamikusan növekszik a sztring hossza. A StringBuffer nyilvántartja a pillanatnyi méretét (length) és a kapacitását (capacity). ● StringBuffer objektum létrehozása, különböző konstruktorokkal: StringBuffer sb1= new StringBuffer(); // L:0 C:16 StringBuffer sb2= new StringBuffer(10); // L:0 C:10 String s = "Sopron"; StringBuffer sb3= new StringBuffer(s); // L:6 C:22 (6+16) ● A kapacitás növelése: – automatikusan, ha szükséges – ensureCapacity(uj) ● ha uj < capacity(), akkor nem változik semmi ● egyébként az új kapacitás a következők közül a nagyobb: – uj – 2 * capacity() + 2
A Java programozási nyelvSoós Sándor 34/34 StringBuffer osztály Append, Insert ● append(s): a string végére fűzi s-et sztring formában. ● insert(poz, s): a poz pozíciótól kezdve fűzi be s-et. ● s lehetséges típusai és a konverzió módja megegyezik a String osztálynál látottakkal.