Programozás III. Varjasi Norbert varjasin@sze.hu 1
A Java nyelv fő jellemzői Egyszerű Objektumorientált Elosztott Robusztus (hibatűrő, megbízható): Biztonságos Hordozható Architektúra-független (gépfüggetlen): Interpretált Nagy teljesítményű Többszálú Dinamikus 2
A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata: Betölti a használt osztályokat (.class állományok) Az ott található blokkokat, utasításokat értelmezi, átalakítja gépi kódú üzenetekké és futtatja. Memóriát kezel, kioszt, felszabadít, op. rendszerrel kapcsolatot tart, erőforrásokat használ. 3
4
5
6
A Java adattípusai Széchenyi István Egyetem 7
A Java adattípusai 8
A Java megszámlálható egész adattípusai Egészek: Pl.: byte (8 bites, -128 127) short (16 bites, -32.768 32.767) int (32 bites, -2.147.483.648 2.147.483.647) long (64 bites, -9.223.372.036.854.775.808 9.223.372.036.854.775.807) int újszoket, régiszoket, newsocket, oldsocket; byte elsőbájt, lastbyte; byte utolsóbájt = 12; (értékadással) int folyamazonosító = 017; (oktális értékadás) int streamid = 017; int kapcsolóazonosító = 0XFF; (hexadecimális értékadás) int streamcontrolid=0x0f, switchid=0xbb; 9
Lebegőpontos típusok: Széchenyi István Egyetem float (32 bites, 1.40129846432481707e-45-3.40282346638528860e+38) double (64 bites, 4.94065645841246544e-324d - 1.79769313486231570e+308d) Pl.: float összeg=23.8f, újösszeg=24.f; float cashvalue=23.8f, newcashvalue; double teljesösszeg=1.56e2, régiösszeg=2.34e4d, össz=7.34d; double newtotal=1.56e2, oldtotal=2.34e4; 10
Karakter típusú adatok: char (2 bájt/karakter!, 0 65.535 ) Pl.: char elsőbetű, másodikbetű='b'; char sensechar, ringchar='e'; Logikai típusú adatok boolean (1 bit) Pl.: boolean kilép, vanérték=true; boolean loopsensor, pollsensor=true; 11
Kulcsszavak és azonosítók abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static super switch synchronized this throw throws transient try void volatile while 12
Kifejezések, operátorok prefix az operátor az operandus előtt áll, postfix az operátor az operandus után áll, vagy infix jellegű az operátor az operandusok között helyezkedik el. A kifejezés kiértékelése a műveleti jelek közötti precedencia szabály alapján következik 13
Precedencia Operátor Megnevezés [ ] tömb indexelés. tagelérés pl: java.lang.math.pi ( ) zárójeles kifejezés kif++ kif-- postfix operátorok ++kif --kif +kif kif prefix operátorok! ~ logikai NEM, bitenkénti NEM new (típus)kif példányosítás típuskényszerítés * / % aritmetikai műveletek + - << eltolás balra, a legkisebb bit 0-t kap >> eltolás jobbra, és balról a legmagasabb helyiértékű bit értéke kerül be >>> eltolás jobbra, balról 0 érkezik. 14
Precedencia Operátor Megnevezés < > <= >= összehasonlítások instaceof az objektum példánya-e az osztálynak ==!= egyenlőségvizsgálatok (referencia összehasonlítás) & bitenkénti ÉS ^ bitenkénti kizáró VAGY bitenkénti VAGY && logikai ÉS logikai VAGY? : feltételes kifejezés = += -= *= /= %= hozzárendelés, értékadás >>= <<= >>>= bit szintű értékadások &= ^= = 15
Referenciák, példányosítás A példányok - objektumok típusa Minden objektum, tömb, felsorolás ilyen A referencia!= mutató, (kicsit több annál :) Pl: Osztálytípus peldánynév; Teglalap t1; String szoveg1; String szoveg2 = new String( Béla ); Teglalap t2 = new Teglalap(3,4); A null referencia szoveg1 = null; 16
Hozzáférési kategóriák (adatrejtés) nyilvános tagok (public) csomag-szintű tagok (jelöletlen) védett tagok (protected) privát tagok (private) 17
Vezérlési szerkezetek utasítások feltételes kifejezés elágazások if if-else if-else-if switch ciklusok while do-while for 18
Feltételes kifejezések if(<logikai kif.>) <utasítás>; (vagy utasítás blokk); if(<felt.>) {<utasítás;>} else{<utasítás;>} if(<felt.>) {<utasítás;>} else if(<felt.2>) {<utasítás;>} else {<utasítás;>} switch(<argumentum>){ case <érték1>: utasítás(ok); break; case <értékn>: utasítás(ok); break; default: utasítás(ok); } <argumentum>: megszámlálható típus, (java 7-től: String is!) 19
Elöl- és hátultesztelő ciklusok while: while (<kifejezés igaz>) { <utasítások;> } while (i < 5) { sum += tomb[i]; i++; } do-while: do{ <utasítások;> }while (<kifejezés igaz>) do { i++; namearray[i] = ; } while (i!= lastindex); 20 PÉLDA demo
A tömb adattípus 21
Tömbök deklarációja <elemtípus>[] <tömbazonosító>; <elemtípus> <tömbazonosító>[]; int ct[], d; // d egyetlen elemi adat!!! Alkalmazott[] dolgozok; int a[3]; -> fordítási hibát okoz!! 22
Tömbök létrehozása new <elemtípus> [méret]; it = new int[365]; dt = new double[365/12]; //30! st = new String[4]; 23
Tömbök helyfoglalása short [] atomb = new short[10]; for(int i=0; i < atomb.length; i++){ atomb[i] = i*5; } 24
Tömbök deklarálása inicializáló blokkban <elemtípus> [] <tömbazonosító> = { <érték0>, <érték1>, }; int[] atomb = {1, 2, 3, 7, 11 }; char[] maganh = { a, e, i, o, u }; boolean[] valaszok = { true, true, false}; double[] arak = {1202.1, 33.35}; 25
Többdimenziós tömbök <elemtípus>[][] <tömbazonosító>; Egy 2 dimenziós tömb deklarációja: double [][] a; A 2 dimenziós tömb létrehozása: a = new double[2][3]; 26
Többdimenziós tömb megadása inicializáló blokkal <elemtípus> [][] <tömbazonosító> = { {<érték0>, <érték1>, }, {<érték0>, <érték1>, }, }; int[][] honapnapjai = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; 27
Többdimenziós tömbök helyfoglalása int[][] honapnapjai = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; 28
Többdimenziós tömbök egyéb esetei Megadható különböző méretű, több lépésben létrehozott többdimenziós tömb is: int[][] alsomatrix = new int[3][]; for (int i=0; i < alsomatrix.length; i++ ){ alsomatrix[i] = new int[i+1]; for (int j=0; j < alsomatrix[i].length; j++ ) { alsomatrix[i][j] = 1; } 29
Objektumokból képzett tömbök Obejektumtípus [] azon = new Objektumtípus[n]; String [] honapok = new String[12]; vagy inicializátorral: String [] honapok = { január, február, }; 30
Tömbök bejárása 1 for (<inic.> ; <log.kif.> ; <lépt.>){<ut.>} int i = 0 ; for ( ; i < 10; i++) { a[i] = 0;} for(int i = 0; i < 10; i++) { a[i] = 0;} for(int i = 0; i < 10; ) { a[i] = 0; i++; } for(int i=0, j=10; i<=j; i++, j--){ szamlalo++;} for(int i=start+newlist;i<=followbitsum;i+=2){ utasítások ;} 31
Tömbök bejárása 2 for (<típus> <elem> : <tömb>){} int total = 0; int t[] = new int[10]; for(int i: t){ total += i; } 32
Szöveges adatok kezelése A String osztály 33
Karakteres típusok 'a', '\t', '\b',... karakteres konstans char alaptípus Karakterekből képzett tömbök: char sor[] = new char[50]; Feldolgozásuk: C nyelvhez hasonlóan 34
Sztringkezelés Egy új, önálló osztály a szöveges adatok kezelésére, együttműködés az alaptípusokkal, automatikus konverzióban használható, a String osztály használata String szov1 = new String( első szöveg ); String szov2 = második szöveg ; String szov3 = Eredmény = +3 ; Konstans karakterláncok kezelése. Hatékony és gyors karakterlánc kezelés. Egyszerű műveletek és metódusok. 35
Sztringkezelés Alapműveletek: length(), charat(i), getbytes(), split(string,delim), tochararray(), valueof(g,i), substring(i,db) Csak kevés módosító művelete van: concat(g), replace(mit, mire), tolowercase(), touppercase(), trim(). 36
Sztringkezelés módosítható szöveges adatok A StringBuffer osztály String StringBuffer átalakítás oda-vissza hozzáfűzés, beszúrás (append, insert) rövidítés, bővítés megfordítható (reverse) karakterek, réssztringek törölhetők 37
StringBuffer (StringBuilder) Metódusai: capacity(), length(), charat(i), indexof(g), lastindexof(g) append(g), delete(i1, i2), insert(iposn, g), getchars(i), setcharat(iposn, c), substring(), replace(i1,i2,gvalue), reverse(), trimtosize(), tostring(g) 38
Szövegek darabolása split metódus, StringTokenizer Gyakori feladat a szövegek szétdarabolása fehér karakterek mentén: 1. String osztály split metódus String[] eredmeny = "Egy darabolási teszt feladat".split("\\s"); for (int x=0; x<eredmeny.length; x++) System.out.println(eredmeny[x]); (reguláris kifejezések!) 2. StringTokenizer osztály Később tárgyaljuk (a java.util csomagnál)! StringTokenizer st = new StringTokenizer("Egy darabolási teszt"); while (st.hasmoretokens()) { System.out.println(st.nextToken()); } 39
Csomagoló (burkoló) osztályok elemi típushoz egy ún. csomagoló osztály: Boolean, Character, Integer, Long, Float, Double Az adott típusú értéket egy objektumban helyezi el, amely ezután referenciaként érhető el: + : összetett adatszerkezetekben hatékonyabban használhatóak, elérhetőek egyes speciális műveletek : helypazarló Példa: Float f = new Float(3.14); int n = Integer.parseInt( 1234 ); 40
Csomagoló osztályok 41