A Java jellemzői Hordozható, platformfüggetlen forráskód és bájtkód szinten forráskód és bájtkód szinten Tisztán objektumorientált csak osztályok, illetve objektumok léteznek csak osztályok, illetve objektumok léteznek Szabványos osztálykönyvtár Szintaktikája a C++ -on alapszik.
A Java nyelv alapjai 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 )
Literálok Logikai értékek: true, false Egész számok: 0 kezdetű számok oktális (8-as számrendszer), pl kezdetű számok oktális (8-as számrendszer), pl x kezdetű számok hexadecimális (16-os számrendszer), pl. 0xff 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 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 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 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 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! 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”
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
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: 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.
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; }
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++) for (int j = 0; j < tomb[i].length; j++) tomb[i][j] = ++szamlalo; } 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.print( tomb[i][j] + " " ); System.out.println( ); } System.out.println( ); }}}
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 csak szükség esetén értékeli ki &, |logikai ÉS, VAGY, mindkét operandust mindig kiértékeli 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 balra, jobbra (előjelbittel) >>>bitenkénti léptetés jobbra (0 lép be) &, |, ^, !bitenkénti ÉS, VAGY, Kizáró VAGY, NEM =, +=, -=, *=, /=, %=, &=, |=, ^=, >=, >>>=
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: Explicit konstruktor hívással: String s1 = new String(); String s2 = new String("Ez " " sztring!"); Implicit konstruktor hívással: Implicit konstruktor hívással: String s1 = „NYF"; String s2 = s1 + " MAT.INT " ; Karaktertömbből: Karaktertömbből: char[] karaktertomb = {‘N', ‘y', ‘F'}; String s3 = new String(karaktertomb); //„NyF" String s4 = new String(karaktertomb, 1, 2);//„yF"
String osztály - Konverziók String.valueOf metódus: boolean, char, double, float, int, long típusoknál értelemszerűen boolean, char, double, float, int, long típusoknál értelemszerűen Például: 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"
String osztály A tartalom elérése Egy karakter elérése: charAt metódus char ch = s3.charAt(2); // ch = ‘F' (s3=„NyF") char ch2 = „NyF".charAt(0); // ch2 = ‘N' 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! 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 (lehetne!) de az abszolút érték nem definiált (+0, -0)! de az abszolút érték nem definiált (+0, -0)!
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 // 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
String osztály Egyéb műveletek A sztring hossza: length metódus int len = „Nyíregyháza".length(); // len = 11 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!
Változók A változó deklaráció formája: [módosítók] típus változó [inicializáció] [módosítók] típus változó [inicializáció] vesszővel felsorolhatunk több változót is Fontos módosítók: final: konstanst hoz létre final: konstanst hoz létre értékadással nem változtatható meg beállítása: inicializáció helyben, konstruktorok, inicializáló blokk static: osztályváltozó static: osztályváltozó Hozzáférés: public, protected, private, üres Hozzáférés: public, protected, private, üres egyetlen példányban létezik az osztályban Változók használata önmagában önmagában minősített hivatkozás: (objektum v. osztály).változó minősített hivatkozás: (objektum v. osztály).változó
Metódusok A metódus definíció formája: [módosítók] típus Név([paraméterek]) {törzs} [módosítók] típus Név([paraméterek]) {törzs} Fontos módosítók: Hozzáférés: public, protected, private, üres Hozzáférés: public, protected, private, üres Metódusok használata önmagában önmagában minősített hivatkozás: (objektum v. osztály).metódus minősített hivatkozás: (objektum v. osztály).metódus A metódusnevek túlterhelhetők, a szignatúra egyedi szignatúra: név + paraméterek típusa, száma szignatúra: név + paraméterek típusa, száma a metódus neve megegyezhet egy változóéval is! a metódus neve megegyezhet egy változóéval is!
Egy egyszerű osztály public class Auto1 { public class Auto1 { private String rendszam; private String rendszam; private String tipus; private String tipus; private int ajtoszam; private int ajtoszam; private int hengerszam; private int hengerszam; private int ev; private int ev; private int suly; private int suly; private int kilometer; private int kilometer; private float fogyasztas; private float fogyasztas; // folytatás a következő dián
Egy egyszerű osztály, folyt. // folytatás az előző diáról public Auto1() { public Auto1() { rendszam = ""; rendszam = ""; tipus = ""; tipus = ""; ajtoszam = hengerszam = ev = suly = kilometer = 0; ajtoszam = hengerszam = ev = suly = kilometer = 0; fogyasztas = 0.0f; fogyasztas = 0.0f; } // folytatás a következő dián
Egy egyszerű osztály, folyt. // folytatás az előző diáról public void ajtoszam( int a ) public void ajtoszam( int a ) { ajtoszam = a; } { ajtoszam = a; } public int ajtoszam() public int ajtoszam() { return ajtoszam; } { return ajtoszam; } public void hengerszam( int h ) public void hengerszam( int h ) { hengerszam = h; } { hengerszam = h; } public int hengerszam() public int hengerszam() { return hengerszam; } { return hengerszam; } } // az osztály vége } // az osztály vége
Az osztály használata public class AutoTest { public static void main( String[] args ) { public static void main( String[] args ) { Auto1 kocsi = new Auto1(); Auto1 kocsi = new Auto1(); kocsi.ajtoszam( 5 ); kocsi.ajtoszam( 5 ); kocsi.hengerszam ( 4 ); kocsi.hengerszam ( 4 ); System.out.println( "kocsi.ajtoszam: " + kocsi.ajtoszam() ); System.out.println( "kocsi.ajtoszam: " + kocsi.ajtoszam() ); System.out.println( "kocsi.hengerszam: " + kocsi.hengerszam() ); System.out.println( "kocsi.hengerszam: " + kocsi.hengerszam() ); }}
Konstruktorok A konstruktor a példányosításkor automatikusan lefutó programkód. Miben különbözik a metódusoktól? neve megegyezik az osztály nevével neve megegyezik az osztály nevével nincs visszatérési érték, void sincs! nincs visszatérési érték, void sincs! módosítóként csak a hozzáférés módosítók használhatók módosítóként csak a hozzáférés módosítók használhatók Több konstruktort is definiálhatunk különböző szignatúrával Ha nem definiálunk konstruktort, akkor a fordító létrehoz egyet, ami public, paraméter nélküli és a törzse üres. A this kulcsszóval hivatkozhatunk az aktuális példányra. Így elérhetjük az elfedett változó neveket, és más konstruktorokat is.
Az Auto osztály újra public class Auto2 { public class Auto2 { String rendszam; String rendszam; String tipus; String tipus; int ajtoszam; int ajtoszam; int hengerszam; int hengerszam; int ev; int ev; int suly; int suly; int kilometer; int kilometer; float fogyasztas; float fogyasztas; // folytatás a következő dián
Az Auto2 konstruktorai 1 public Auto2( String rendszam, String tipus, int ajtoszam, int hengerszam, int ajtoszam, int hengerszam, int ev, int suly, int kilometer, float fogyasztas) { int ev, int suly, int kilometer, float fogyasztas) { this.rendszam = rendszam; this.rendszam = rendszam; this.tipus = tipus; this.tipus = tipus; this.ajtoszam = ajtoszam; this.ajtoszam = ajtoszam; this.hengerszam = hengerszam; this.hengerszam = hengerszam; this.ev = ev; this.ev = ev; this.suly = suly; this.suly = suly; this.kilometer = kilometer; this.kilometer = kilometer; this.fogyasztas = fogyasztas; this.fogyasztas = fogyasztas; }
Az Auto2 konstruktorai 2 public Auto2() { this( "", "", 0, 0, 0, 0, 0, 0.0f ); this( "", "", 0, 0, 0, 0, 0, 0.0f ); } public Auto2( String rendszam, String tipus) { this( rendszam, tipus, 0, 0, 0, 0, 0, 0.0f ); this( rendszam, tipus, 0, 0, 0, 0, 0, 0.0f ); }