3.37k likes | 3.61k Views
Java – start!. Minden jog fenntartva. A szerző előzetes írásbeli engedélye nélkül jelen anyagot vagy annak részleteit más nyelvre lefordítani, reprodukálni és közölni tilos!
E N D
Java – start! Minden jog fenntartva. A szerző előzetes írásbeli engedélye nélkül jelen anyagot vagy annak részleteit más nyelvre lefordítani, reprodukálni és közölni tilos! Non-profit oktatási intézmények ingyenesen felhasználhatják; más-jellegű felhasználáshoz, így pl. tanfolyam-tartáshoz az XSys Kft. hozzájárulása szükséges. A Java a Sun Mictosystems, Inc. bejegyzett védjegye.
„Hello!” • Írjuk ki a Hello! szöveget! // Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } }
Megjegyzés Megjegyzés // 1.1 Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } } • A Java figyelmen kívül hagyja a sor // után következő részét.
Osztály (class) Hello: publikus osztály // Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } } • Objektumorientált nyelvekben a programunkat osztályoknak (class) nevezett zárt egységekből építjük fel • publikus (mindenki által használható) osztály
Jellegzetességek // Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } } jellegzetességek • A nevet követően,kapcsos zárójelek között soroljuk fel az osztályhoz tartozó elemeket, melyeket az osztály jellegzetességeinek (feature) nevezünk.
public static void main(String[] args) main public class Hello {// Hello.java public static void main(String[] args) { System.out.println("Hello!"); } } • Ha egy pontosan ilyen (main nevű, „publikus és statikus”, stb.) jellegzetességet megadunk, akkor a Java el tudja indítani, futtatni tudja az osztályt. • Az osztály futtatása:a kapcsoszárójelek közötti programrész végrehajtása.
Kiírás // Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } } Kiírás a konzolra • A zárójelek között számérték vagy egy egyszerű kifejezés is szerepelhet
Kifejezés kiírása • Írjuk ki a kifejezés értékét! public class Kiírás { public static void main(String[] args) { System.out.println( 2.8/3*(1+3) ); } }
Szövegek összefűzése • Több szöveget a + művelettel fűzhetünk össze, így a megjelenő értéket magyarázószöveggel is ki tudjuk egészíteni. public class Kiírás { public static void main(String[] args) { System.out.println("2.8/3*(1+3) értéke: "+ (2.8/3*(1+3))+"."); } } összefűzés összefűzés
JDK • Java nyelvű programok készítéséhez (fordításhoz) szükséges egy fejlesztői környezet. • JDK: Java Development Kit • A Java nyelvet kifejlesztő SUN által ingyen rendelkezésre bocsátott„Java fejlesztői csomag” • www.javasoft.com címről letölthető • Java programozás: • JDK: minimális készlet • Integrált fejlesztői környezet (IDE: Integrated Development Environment)
JDK telepítése • A telepítés részben bizonyos állományok („fájlok”) elhelyezését jelenti. • Fordító, futtató és kiegészítő programokelérhetővé tétele. (PATH). • A Java programok környezetét jelentő állományok helye. CLASSPATH elnevezésű környezeti változó: • osztályokat tartalmazó könyvtárakat, • több osztályt/könyvtárat tömörítetten tároló jar v. zip állományok. • ACLASSPATH értékét ki kell egészítenünk azzal a könyvtárral, amelybe elhelyezzük a programjainkat.(esetleg az aktuális könyvtárral)
Fordítás és futtatás • Hello.javaszöveges állomány. • Állomány neve = a publikus osztály neve • .java kiterjesztés! • Fordítás: Java compiler • javac Hello.java • eredmény: Hello.class • Futtatás: • java Hello • (Hello! szöveg)
Fordítás és futtatás • class állomány: bájtkód forma • java paranccsal indítható • Java virtuális gép (JVM: Java Virtual Machine). • Gépfüggetlen: más gépen is futtatható (hálózat)
Megjegyzések • A megjegyzéseket a fordítóprogram figyelmen kívül hagyja. • Megjegyzés: ahova kiegészítő szóközöket is írhatunk. • A Java három fajta megjegyzést ismer. • // után a sor végéig tartó rész, • /* és */ között: több soros(nem ágyazhatók egymásba), • /** és */ között (speciális változat):dokumentációs megjegyzés valamely definiált elem (pl. osztály vagy jellegzetesség) előtt. • javadoc program: html dokumentáció. (szabványos környezetdokumentációja is így készült)
Azonosító • Azonosító: • programelem elnevezése • betűvel kezdődik és betűvel vagy számjeggyel folytatódik • A $ és az _ jelek is betűnek számítanak ($ jel a Java céljaira) • Unicode szabvány alapján a nemzeti karakterek (pl. á, é, stb.) • kis- és a nagybetűk különbözők • A Java nyelv készítőinek ajánlása: • osztályok elnevezését nagybetűvelkezdjük, • jellegzetességek nevét kisbetűvelkezdjük • Több szavas elnevezés:pl. a születési dátum => születésiDátum
Kulcsszavak • Kulcsszavak: csak a nyelv által meghatározott jelentésben használhatók (kis- és a nagybetű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, synchronize, this, throw, throws, transient, try, void, volatile, while
Applet • Java különlegessége: www dokumentumokba Java nyelvű programokat illeszthetünk be • applet (kisalkalmazás): html-oldalakba ágyazható • intelligensebb megjelenítés és működés • A web-lapon az applet kap egy adott méretű grafikus területet, ahova rajzolni lehet.
Applet beágyazása • HelloApplet.html <HTML><HEAD><TITLE>HelloApplet</TITLE></HEAD> <BODY> Kiírás: <applet code="HelloApplet.class" width=80 height=15></applet> </BODY> </HTML> • HelloApplet.class: elhelyezni a megfelelő könyvtárba. • A web-lap megtekintésekor a program automatikusan elindul. Helyettesítő szöveg futtatandó állomány grafikus terület applet-tag
Szöveg kirajzolása appletből public class HelloApplet extends java.applet.Applet { public void paint(java.awt.Graphics g) { g.drawString("Hello!", 5, 12); } } • Más szerkezetűek • Rajzolás: paint • Szöveg kirajzolása: drawString
appletviewer • applet indítása: • rá hivatkozó html oldal • Böngésző • appletviewer (JDK) • figyelmen kívül hagyja a html-lapon szereplő többi szöveget • több applet esetén mindegyiket külön ablakban jeleníti meg • Java alkalmazásból is lehetséges a grafikus megjelenítés • Appletből is kiírhatunk szöveget a konzolra • a szöveg megtekintéséhez a böngészőben be kell kapcsolnunk a Java konzol megjelenítését • általában diagnosztikai üzenetek
Rajzolás appletből // width=200 height=100 public class RajzApplet extends java.applet.Applet { public void paint(java.awt.Graphics g) { g.setColor(java.awt.Color.blue); g.fillRect(10,20,180,60); g.setColor(java.awt.Color.red); g.fillOval(20,10,100,50); } }
Egyszerű számítás • A téglalap adataiból számítsuk ki a kerületét és a területét! osztályrészfeladatai (funkciók) részfeladatok metódusok konstruktor tulajdonságok valós érték • saját • +publikus
Osztály és objektum • Osztály: • típus, olyan keret, melyet konkrét adatokkal tölthetünk fel. • pl.: egy Téglalapnak van egy a és egy b tulajdonsága, illetve egy kerület és egy terület metódusa. • Konkrét Téglalap: a két oldalhosszúságnak konkrét értéke van, így a téglalap a kerület és a terület értékeit is meg tudja adni. • Objektum (vagy példány): a konkrét elem • Az osztály az objektumainak a típusa, azaz a lehetséges objektumok közös jellegzetességeit határozza meg.
Téglalap • Konstrukció (létrehozás): • adott osztályú objektumkészítése (példánkban egy konkrét Téglalap felvétele) • Megadása: egy különleges metódus, a konstruktor (constructor) segítségével: az objektumot milyen értékek (esetleg objektumok) alapján és milyen módon készíthetjük el.(a jel arra utal, hogy az objektumot a zárójelek között felsorolt paraméterekből hozzuk létre.) • Konstruktor esetén a + jel azt jelenti, hogy a „külvilág számára” engedélyezzük az objektum létrehozását.
tulajdonságok konstrukció értékadás metódusok visszatérési érték
Téglalap public class Téglalap { private double a; private double b; public Téglalap(double a_, double b_) {a=a_;b=b_;} public double kerület() { return 2*(a+b); } public double terület() { return a*b; } }
Használat public class Téglalap { private double a; private double b; public Téglalap(double a_, double b_) { a=a_; b=b_; } public double kerület() { return 2*(a+b); } public double terület() { return a*b; } public static void main(String[ ] args) { Téglalap t=new Téglalap(10,20); System.out.println("A téglalap kerülete: "+t.kerület()+ ", területe: "+t.terület()+"."); } }
Téglalap t=new Téglalap(10,20); t.kerület() • objektum jellegzetessége: . operátor
Változó definíciója • típus név; • típus név = kezdőérték; • Több, azonos típusú változó • double a,b; • double x=1,y,z=3*2.54;
Változó • Lokális változó v. paraméter • lokális változó: definiálatlan kezdőértékű • Fordítási hiba: double x; return x; • Jellegzetességként : attribútum, mező, vagy tagváltozó. • Alapérték: • számok esetén 0, • logikai változó esetén false, • karakteres változó esetén a null-karakter ('\0' „semmilyen” karakter), • referencia esetén null (később)
Jellegzetességek elérése • Osztály definícióján belül közvetlenül elérhetők,az objektum határain kívül a . operátort kell használnunk. • Osztály definícióján belül az aktuális objektumra a this kulcsszóval hivatkozhatunk • akkor is elérhetjük az objektum jellegzetességeit (pl. this.a), ha egy paraméter vagy egy lokális változó neve megegyezik az osztály egy jellegzetességének a nevével.
Komponensek • Adott módú („szabványos”) programozás • Java filozófiája • Nagyobb flexibilitást biztosít • Attribútumok helyett tulajdonságok (property)
Komponensek (adott módú programozás) • Tulajdonságok Származtatott v. Alap tulajdonság x: double // csak lekérdezhető, de nem beállítható y: double< // lekérdezhető és beállítható z: double<< // csak beállítható, de nem lekérdezhető
Lekérdező/beállító metódusok private double xx; // ha nem származtatott public double getXx() { return xx; } // ha lekérdezhető public void setXx(double xx_) { xx=xx_; } //ha beállítható public class Téglalap { private double a; private double b; public Téglalap(double a_, double b_) { a=a_; b=b_; } public double getKerület() { return 2*(a+b); } public double getTerület() { return a*b; } }
public class Téglalap { private double a; public double getA() { return a; } public void setA(double a_) { a=a_; } private double b; public double getB() { return b; } public void setB(double b_) { b=b_; } public Téglalap(double a_, double b_){ a=a_;b=b_;} public double getKerület() { return 2*(a+b); } public double getTerület() { return a*b; } }
Kipróbálás Téglalap t=new Téglalap(10,20); System.out.println(t.getA()+"x"+t.getB()+" téglalap"); System.out.println(" kerülete: "+t.getKerület()); System.out.println(" területe: "+t.getTerület());
Számított tulajdonság ( értéke:Math.PI)
public class Kör public class Kör { private double sugár; public double getSugár () { return sugár; } public void setSugár(double sugár_) { sugár=sugár_; } public Kör(double sugár_) { sugár=sugár_; } public double getKerület() { return 2*sugár*Math.PI; } public double getTerület() { return sugár*sugár*Math.PI; } public static void main(String[] args) { Kör k=new Kör(1); System.out.println(k.getSugár()+" egység sugarú kör"); System.out.println(" kerülete: "+k.getKerület()); System.out.println(" területe: "+k.getTerület()); } }
Math PI: double E: double sin(x: double): double asin(x: double): double cos(x: double): double acos(x: double): double tan(x: double): double atan(x: double): double
Math abs(a: int): int abs(x: double): double min(a: int, b: int): int max(a: int, b: int): int min(x: double, y: double): double max(x: double, y: double): double rint(x: double): double sqrt(x: double): double pow(x: double, a:double): double exp(a: double): double log(x: double): double random(): double
Egy másodpercekben megadott időtartam alapján írjuk ki, hogy az hány óra, hány perc és hány másodperc! Időtartam: getÓra():int getPerc():int getMásodperc():int
public class Időtartam private int óra; public int getÓra() { return óra; } private int perc; public int getPerc() { return perc; } private int másodperc; public int getMásodperc() { return másodperc; } public Időtartam(int összes) { óra=összes/(60*60); perc=összes/60%60; másodperc=összes%60; } • Egészosztás és maradékszámítás
Időtartam ... public static void main(String[] args) { Időtartam t=new Időtartam(3823); System.out.println(t.getÓra()+" óra "+ t.getPerc()+" perc "+ t.getMásodperc()+"másodperc"); }
Elemi típusok logikai típus booleanfalse vagy true1 egész-jellegű típusok byte-128..1271 char65536 féle2 short-32768..327672 int-2147483648..21474836474 long-9223372036854775808..9223372036854775807 8 valós típusok floatkb. (1.410-45 .. 3.410+38)4 doublekb. (4.910-324 .. 3.810+308)8
Elemi típusok és a void • Gyakran használt típusok: • egész érték: int, esetleg long • kis ábrázolási tartomány: short, esetleg byte • byte: operációs rendszerrel kapcsolatos adatokfeldolgozása. • Valós értékek:double, esetleg float • Gépfüggetlentípusok • void: nem típus; a segítségével jelezzük, hogy egy metódus nem ad vissza értéket.