Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
A Java programozási nyelv
PPKE-ITK A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor
2
Követelmények Nagy házi (határidő: május 12. 24:00)
2 db ZH: beugró + géptermi ZH ZH-k időpontja: 1.ZH április 26., Szerda, 16-19 2.ZH május 22. , Hétfő, PótZH és UV szeptemberben
3
Tematika Eclipse IDE C++-ról Javara
Típusok, tömbök, osztályok, interface … Kivételkezelés, öröklődés Collection Framework Template …
4
A nyelvről röviden SUN Microsystems gyermeke
Különböző kiadások: J2SE,J2EE,J2ME Mi a J2SE 1.5 –tel foglalkozunk A JAVA ősei: SmallTalk ill. a C++ Jelölésrendszere a C++ -ból átvett DE figyelem a szemantika nem mindenütt ugyanaz!!!
5
A nyelvről röviden Mutatók helyett referenciák!
Futtató környezet(interpretált nyelv) => BÍZTONSÁGOS fejlesztés…
6
Interpretált jelleg Futtatás szintje Java sourcecode Solaris
Virtual Machine Compiler(javac) … Windows XP Virtual Machine Java bytecode környezetfüggetlen
7
Különbségek a C++-tól Interpretált jelleg Nincsenek mutatók
Tisztán OO nyelv( a C++ multiparadigmás) Egy java program objektumok és ezek mintáiúl szolgáló osztályok összessége. Minden fv. valamely osztály tagfv.-e!
8
Típusrendszer
9
Típusok C++ szemmel C/C++ -ban a beépített típusok pontos mérete és értéktartománya nincsen definiálva(pl. char előjeles vs előj. nélk.) Bár vannak garanciák: pl. short int legalább 16 bites… Oka: a C++ filozófiája(max. optimalitás minden platformon)
10
Mi a helyzet a Javaval? Cél: bináris kompatibilitás
Ezért az egyes típusok mérete és értéktartománya is platformfüggetlen kell legyen Erős korlátozások a primitív típusokkal szemben (nem lehet futási időben létrehozni őket) Példányaik nem objektumok java értelemben
11
Primitív típusok és burkolók
Méret Wrapper Hasonló C++ byte 8bites előjeles egész Byte signed char short 16bites előjeles egész Short int 32bites előjeles egész Integer long 64bites előjeles egész Long long long boolean Logikai (nem egész!) Boolean bool float 32bites lebegőpontos Float double 64bites lebegőpontos Double char 16bites Unicode kar. Character wchar_t
12
Primitív típusok Ilyen típusú változókat nem hozhatunk létre futási időben, ezek nem számítanak objektumoknak Változókat adhatunk át metódushíváskor Primitív típusokat érték szerint Míg objektumokat referencia szerint
13
Egy-két különbség a C++-hoz
Nincsenek mutatók Nincsen delete A garbage collector automatikusan szabadítja fel az objektumokat Konstruktorok vannak Destruktorok nincsenek ( esetleg finalize())
14
HelloWorld.java public class HelloWorld {
Konvenció: A java osztályok neve nagy betűvel kezdődik! HelloWorld.java public class HelloWorld { public static void main(String[] args) System.out.println(”Hello World”); } A minden publikus osztályt külön – az osztály nevének megfelelő java kiterjesztésű – fájlba kell írni. Van egy kitüntetett osztály aminek van egy static main metódusa, ez lesz a főprogram!
15
Fontos A main metódus szignatúrája a következő KELL legyen:
public static void main(String[] args) Ez C++-ban úgy volt: int main(int argc, char** argv); A statikus metódusok futtathatók példányoktól függetlenül. Futtatásnál a VM –nek megmondjuk, melyik a „főosztály”, aminek a main metódusát meg kell hívnia. Így indul a prg.
16
Eclipse IDE Letölthető a www.eclipse.org -ról Itt egy kis demózás jön…
Kommentek, javaDoc Jar készítése Manifest fájl
17
Ismerkedés – Eclipse demo
Algoritmus implementációk N! ciklussal VS rekurzív fv.-nyel LegNagyobb Közös Osztó ( külön statikus memberfv.-be)
18
Változók Stack – Heap ?mi is ez? int i; long big = 100000;
boolean logical = true; String str = new String(”alma teve”); // ez objektum nem primitív típ. Vált. // az str úgy használható, mint C++-ban a mutató // (term. Ez egy referencia. ) String str2 = ”alma teve”; // String obj. Tartalmát nem lehet módosítani MyClass my = new MyClass();
19
Hozzáférési kategóriák
private Névtelen (félnyílvános-csomagszintű) protected public
20
Ami eddig kimaradt Betűkészlet azonosítókban: a Unicode 2.0 betűi
Miért publikus/félig nyitott/private az osztály? Egybe tartozó részeket csomagokba tesszük!
21
Csomagoljunk Osztályainkat csomagokba szervezzük
Csomagok nem ágyazhatók egymásba Azonos csomag osztályai látják egymást Ha más csomag osztályát használom, akkor minősítés v./és import a fájl elején import org.apache.xerces.sax.XMLReader; import org.apache.xerces.sax.*;
22
Csomagoljunk Azt, hogy az adott osztály melyik csomagban van, a fájl eleji package kulcsszóval adjuk meg. Ha nem adunk meg semmit, akkor a default csomag. package org.menrod.core; public class XMLPair { //variables protected String namespace = null; protected String element = null; … Az XMLPair az org.menrod.core nevű csomagba került!
23
Konstruktorok Ha nem adunk meg, akkor alapértelmezetten hozzáad egy ürest Ha megadunk egyet, és azt akarjuk, hogy létezzen üres konstr., akkor explicit meg kell adnunk!!! public class MyClass { // alapértelmezetten // létrejön egy def. // konstr. } public class MyClass { public MyClass(int i) { } }
24
Datum.java public class Datum { protected int ev; protected int ho;
protected int nap; public Datum(int ev, int ho, int nap) { this.ev = ev; this.ho = ho; this.nap = nap; } } // end of Datum Nincs a végén pontosvessző!!!!
25
Example1.java public class Example1 {
public static void main(String[] args) { Datum d = new Datum(2006,02,16); }
26
Bővítsük a „Datum”-ot public class Datum { protected int ev;
protected int ho; protected int nap; public Datum(int ev, int ho, int nap) { … } public String kiir() { System.out.print(ev + ”.” + ho + ”.” + nap + ”\n”); return ev + ”.” + ho + ”.” + nap; } // end of Datum
27
Example2.java public class Example2 {
public static void main(String[] args) { Datum d = new Datum(2006,02,16); d.kiir(); // de lehet így is System.out.println( d.kiir() ); // vajon ez mit ír ki: System.out.println( d ); }
28
1. Feladat Készíts egy motor nevű publikus osztályt!
Attribútumok(legyenek protectedek): Hengerűrtartalom Teljesítmény Gyártás ideje( a korábbi Datum ) Legyen egy konstruktora, ahol ezeket be lehet állítani! Műveletek: getHUT getTeljesitmeny getGyartasiIdo ill. setGyartasiIdo(Datum d)
29
Referencia átadása public class Example3 {
public static void main(String[] args) { Datum d = new Datum(2006, 02, 16); Motor m = new Motor(1998, 130, d); d.setEv(2009); m.getGyartasiIdo().kiir(); //???2006 v lesz??? // lehetne így is m = new Motor(1198, 65, new Datum(2000, 1, 1) ); }
30
2.Feladat Készíts egy Gepkocsi osztályt! Attribútumok: Műveletek:
Motor Gyártási idő Megtett kilométerek Műveletek: getEvjarat getMotor getKilometerek
31
Objectum hierarchia, operátorok
Operátorok primitíveken ugyanúgy, ahogy C++-ban Objektum változóin/referenciákon a hagyományos operátorok olyanok, mint ha C++-ban mutatókon végeznénk ezeket. == helyett equals
32
Tömbök Tömb változók deklarációja:
int t[]; int[] t; Változó dekl. nem hozza létre a tömböt Tömb típusok olyanok, mint az osztályok. Lesznek attribútumaik… Objektumok csak dinamikusan allokálhatók, hasonló a C++ dinamikus tömbkezeléséhez Hibásak: int t[10]; int[10] t;
33
Tömbök Tényleges objektumok létrehozása: Tömb vált. csak referencia
int t[] = new int[10]; int[] t = new int[10]; int[] t = { 1, 2, 3, 4 }; t = new int[] { 1, 2, 3, 4 }; Tömb vált. csak referencia Tömbök 0-tól indexelődnek A hossz lekérdezése: t.length Tömb indexelése: t[i] Kivételt dob, ha elindexelünk ArrayIndexOutOfBoundsException
34
Objektumok tömbje Referenciákból álló tömb
MyClass[] t = new MyClass[10]; for (int i=0; i<t.length; i++) t[i] = new MyClass(…); MyClass[] t = { new MyClass(…), new MyClass(…), … };
35
Többdimenziós tömbök Nincs többdimenziós tömb, de helyette tömbök tömbje Hasonlóan a dinamikus C++-os módszerhez int[][] mx = new int[4][3]; for (int i=0;i<4;i++) for (int j=0;j<3;j++) mx[i][j] = i + j; int[][] mx; mx = new int[4][]; for (int i=0;i<4;i++) for (int j=0;j<3;j++) mx[i][j] = i + j;
36
Feladatok Írj verem típust(osztályt)! Amiben int-eket tárolhatsz! A megvalósításhoz használj tömböket! Írd át láncoltlistásra! Írj mátrix típust, annak műveleteivel! Figyelem operátorok túlterhelésére javaban nincs lehetőség!!!!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.