Title: Java programoz
1Java programozási nyelvA nyelv alapjai
- Nyugat-Magyarországi Egyetem
- Faipari Mérnöki Kar
- Informatikai Intézet
- Soós Sándor
- 2005. szeptember
2Java információ források
- ttp//java.lap.hu/
- ttp//java.sun.com/
- ttp//java.sun.com/j2se/1.5.0/docs/api
- Java 2 Platform, Standard Edition, v1.5.0 API
Specification - angol nyelvu referencia a Java osztályairól
(online) - 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
- angol nyelvu Java oktató (on-line)
- ttp//java.sun.com/docs/books/tutorial/download/tu
torial.zip - angol nyelvu Java tutorial (letöltheto)
3A Java rendszer telepítése
- Mire van szükség a Java-ban történo
programozáshoz? - Java 2 Platform, Standard Edition
- Ingyenesen letöltheto a ttp//java.sun.com/j2se/1.
5.0/download.jsp címrol. - Az JDK-t kell letölteni, nem a JRE (runtime)
változatot! - Tetszoleges editor (szövegszerkeszto), ami képes
formázás nélküli tiszta szövegfile-okat kezelni. - Alternatív lehetoség integrált fejleszto
környezetek - NetBeans, letöltheto a fenti címrol
- Eclipse, letöltheto a ww.eclipse.org címrol.
- FreeJava, letöltheto a ttp//belovai.uw.hu/
címrol. - 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 (.)
4A Java jellemzoi
- 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.
5A 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észoben futó bináris program, felhasználhatja
a böngészo 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
6A Java programozási modellJava alkalmazás
Forrásszöveg .java file
javac.exe fordító (compiler)
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
7A Java programozási modellJava kisalkalmazás
(Applet)
Forrásszöveg .java file
javac.exe fordító (compiler)
Bájtkód, bytecode .class file
Java kompatibilis böngészo program bármilyen
eszköz, amire létezik megfelelo böngészo
8A Java programozási modellJavaScript
Forrásszöveg .html fileba ágyazva
JavaScript kompatibilis böngészo
program bármilyen eszköz, amire létezik megfelelo
böngészo
9Az elso 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
10Az elso 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
11Az elso kisalkalmazás HTML
- Forrásszöveg (HelloVilagApplet.html)
- ltHTMLgt
- ltHEADgtltTITLEgtHello Világ Appletlt/TITLEgtlt/HEADgt
- ltBODYgt
- ltAPPLET CODEHelloVilagApplet.class WIDTH200
HEIGHT50gt - Ha a böngészo nem támogatja a Java Appleteket,
akkor ez a szöveg fog megjelenni! - lt/APPLETgt
- lt/BODYgtlt/HTMLgt
- Megtekintés
- appletviewer HelloVilagApplet.html
12Az elso 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 )
-
13A 2. grafikus alkalmazás, adatbevitel
- Forrásszöveg (Addition.java)
- Nézzük meg az Addition.java fájlt!
14A Java nyelv alapjai 1.
- Megjegyzés (comment)
- egysoros megjegyzés
- // jeltol a sor végéig
- hosszabb megjegyzés
- /
- ...
- /
- dokumentációs megjegyzés (a javadoc program
használja) - /
- ...
- /
15A Java nyelv alapjai 2.
- Karakterkészlet
- ASCII helyett Unicode karakterkészlet
- 8 bit helyett 16 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!!!
16A Java nyelv alapjai 3.
- Azonosítók
- Betuvel kezdodik betuvel vagy számmal
folytatódik - Betunek számít a és az _ jel valamint az
ékezetes magánhangzók is. - Case-sensitive, azaz különböznek a kis- és
nagybetuk - 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.
17A Java nyelv alapjai 4.Egyszeru típusok
egyszeru típus osztály leírás boolean Boolean logi
kai típus (true, false) char Character 16 bites
Unicode karakter byte Integer 8 bites egész szám
(-128 - 127) short Integer 16 bit, (-32 768 -
32 767) int Integer 32 bit (-2 147 483 648 - 2
147 483 647) long Long 64 bit (-9 223 372 036 854
775 808 - ...) float Float 32 bit
(-3,40292347E38 - 3,40292347E38) double Double
64 bit (-1,79769313486231570E308 - ...)
- 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.
18A 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 kezdetu számok oktális (8-as számrendszer), pl.
0377 - 0x kezdetu 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 betu long típust
deklarál - Lebegopontos 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égzodéssel lehet float típust deklarálni, pl.
3.14, -123.45, 12.3e4 - Karakterek aposztrófok között kell megadni, pl.
'a', 'Z' - escape szekvenciák, mint a C nyelvben, lásd a
következo oldalon! - Szövegek (String) idézojelek között kell
megadni, pl. Helló Világ
19Escape szekvenciák
- Kód Leírás
- \n újsor
- \t tabulátor
- \b egy karakter vissza, törlés
- \r kocsi vissza, soremelés nélkül
- \f lapdobás
- \\ \ karakter
- \' ' karakter, aposztróf
- \ karakter, idézojel
- \ooo karakter oktális számrendszerben 0-377
- \uhhhh Unicode karakter hexadecimálisan (0-0xffff)
20Változódeklaráció, kezdoértékadás
- Mint a C/C nyelvben, pl. int x, y
- Kezdoérték adható az operátorral, pl. int x1
- A lokális változók nem kapnak automatikusan
kezdoértéket! - Az osztályok adatmezoi a következo kezdoértéket
kapják - Típus Kezdoérték
- boolean false
- char '\u0000'
- byte, short, int, long 0
- float, double 0.0
- objektum null
21Tömbök
- A C/C nyelvvel ellentétben ez igazi típus, nem
pointer - A tömbök indexelése 0-val kezdodik
- Tömb deklarációja a jellel történik a típus
vagy a változó neve után - int EgeszTomb, tomb // mindketto tömb
- int egeszszam, tomb // skalár és tömb
- ez egy tetszoleges méretu tömböt deklarál, amit a
new operátorral fogunk létrehozni - tomb new int20
- A tömb ismeri a saját méretét, amit a length
mezovel le is lehet kérdezni. - System.out.println(tomb.length)
- Indexeléskor a tömb ellenorzi az indexet, hiba
esetén IndexOutOfBoundsException kivétel váltódik
ki.
22Többdimenziós tömbök
- Nincsen többdimenziós tömb, de egy tömbnek
lehetnek tömb elemei, akár különbözo méretuek is.
Például - int tomb new int3 // 3 tömbbol álló
tömb - for (int i 0 i lt tomb.length i)
- tombi new inti1
- for (int j0 j lt tombi.length j)
- tombij 0
-
23Példa többdimenziós tömbre
- public class tomb
- public static void main(String args)
- int tomb new int10 // 10 tömbbol álló
tömb - int szamlalo 9
- for (int i 0 i lt tomb.length i)
- tombi new inti1
- for (int j 0 j lt tombi.length j)
- tombij szamlalo
- for (int i 0 i lt tomb.length i)
- for (int j 0 j lt tombi.length j)
- System.out.print( tombij " " )
- System.out.println( )
-
24Az elozo program kimenete
- 10
- 11 12
- 13 14 15
- 16 17 18 19
- 20 21 22 23 24
- 25 26 27 28 29 30
- 31 32 33 34 35 36 37
- 38 39 40 41 42 43 44 45
- 46 47 48 49 50 51 52 53 54
- 55 56 57 58 59 60 61 62 63 64
- A folytatáshoz nyomjon meg egy billentyut . . .
25Operátorok
- , -, , /, , -, , /, maradék
- , -- prefix és postfix formában
- , - elojel
- gt, gt, lt, lt, , ! 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)
- ltlt, gtgt bitenkénti léptetés balra, jobbra
(elojelbittel) - gtgtgt bitenkénti léptetés jobbra (0 lép be)
- , , , ! bitenkénti ÉS, VAGY, Kizáró VAGY, NEM
- , , -, , /, , , , , ltlt, gtgt, gtgtgt
26Egyéb operátorok
- Oper. Példa Leírás
- ? felt ? kif1 kif2 ha felt igaz, akkor kif1,
egyébként kif2 - típus, vált deklarál egy tömbváltozót
- típusop1 létrehoz egy op1 elemu tömböt a
new-val együtt - op1op2 indexelés, az op1 tömb op2-1 -dik
eleme - . op1.op2 mezohivatkozás,
- op1 objektum, vagy osztály op2 eleme
- () op1(params) metódus deklaráció, vagy hívás
- (type) (type) op1 típuskonverzió, op1-et type
típusúra konvertálja - new new op1 új objektum, vagy tömb létrehozása
- op1 instanceof op2 igaz, ha op1 az op2 egy
példánya
27Sztringek 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
28String 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özo
konstruktorokkal - Explicit konstruktor hívással
- String s1 new String()
- String s2 new String("Ez " 1 " sztring!")
- Implicit konstruktor hívással
- String s1 "NYME FMK"
- String s2 s1 " INF. INT. " 2004
- Karaktertömbbol
- char karaktertomb 'S', 'o', 'p', 'r', 'o',
'n' - String s3 new String(karaktertomb) //
"Sopron" - String s4 new String(karaktertomb, 2, 3) //
"pro"
29String osztály - Konverziók
- String.valueOf metódus
- boolean, char, double, float, int, long
típusoknál értelemszeruen - char esetén uaz. mint az elozo 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 egyszeru osztályok
toString metódusával. Lásd az elozo dia piros
számait!
30String osztályA 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 - 0 ha a két sztring azonos
- negatív ha az aktuális példány a kisebb
- pozitív ha az aktuális példány a nagyobb
- int i "Gyár".compareTo("Gyor") // i 2
- de az abszolút érték nem definiált (0, -0)!
- Keresés indexOf, lastIndexOf, startsWith,
endsWith metódus
31String osztályKeresés
- Karakter vagy sztring keresése indexOf metódus
- int index1 "kukuriku".indexOf('u') //
1 - int index2 "kukuriku".indexOf('u', 2) //
3 - // a 2. indexu elemtol 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 kezdodik-e a sztring startsWith metódus
- boolean start "file.java".startsWith("fi") //
true - Így végzodik-e a sztring endsWith metódus
- boolean vege "file.java".endsWith(".jav") //
false
32String osztályEgyéb muveletek
- A sztring hossza length metódus
- int len "Sopron".length() // len 6
- Kis-, nagybetu váltás toLowerCase, toUpperCase
metódus - String vegyes "Kicsi És nAgYbEtUk Vegyesen"
- String kicsi vegyes.toLowerCase()
- String nagy vegyes.toUpperCase()
- Betucsere 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') - Vezeto é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!
33StringBuffer 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özo
konstruktorokkal - StringBuffer sb1 new StringBuffer() // L0
C16 - StringBuffer sb2 new StringBuffer(10) // L0
C10 - String s "Sopron"
- StringBuffer sb3 new StringBuffer(s) // L6
C22 (616) - A kapacitás növelése
- automatikusan, ha szükséges
- ensureCapacity(uj)
- ha uj lt capacity(), akkor nem változik semmi
- egyébként az új kapacitás a következok közül a
nagyobb - uj
- 2 capacity() 2
34StringBuffer osztályAppend, Insert
- append(s) a string végére fuzi s-et sztring
formában. - insert(poz, s) a poz pozíciótól kezdve fuzi be
s-et. - s lehetséges típusai és a konverzió módja
megegyezik a String osztálynál látottakkal.