2009.10.01. 1 Java programozás alapjai A Java nyelv C++ szintaktikára épít, számos különbséggel Hello, World (alkalmazás, parancssorból indítható): A HelloWorldApp.java fájl: class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); } } A főosztály: neve = fájlnév, van benne main A program belépési pontja: statikus metódus cout << … << ‘\n’ Hello world futtatása class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); } } HelloWorldApp.java HelloWorldApp.class Szimbólumtábla: main: public, static, void … ... javac HelloWorldApp.java java HelloWorldApp Belölti a HelloWorldApp.class fájlt és elindítja a main függvényt. Mivel még nincs ilyen objektum a main szükségképpen statikus Java adattípusok Egyszerű adattípusok (int, float) Osztályokkal objektumok Nincs külön mutató, referencia, címe operátor, • helyette: objektumok csak dinamikusan hozhatok létre és csak referenciával hivatkozhatunk rájuk Egyszerű adattípusoknak van csomagoló objektuma Tömbök (is objektumok) Sztringek Egyszerű adattípusok Egyszerű alaptípusok: Az egész típusok szélessége nem függ a platformtól Előjel nélküli (unsigned) egész nincs! Az == operátor alkalmatlan két double egyenlőségének vizsgálatára! byte 8-bites előjeles egész short 16-bites előjeles egész int 32-bites előjeles egész long 64-bites előjeles egész float 32-bites lebegőpontos (IEEE 754) double 64-bites lebegőpontos (IEEE 754) char 16-bites Unicode karakter boolean Bool-érték (igaz v. hamis) “Unsigned” egészek byte unsigned értékének kiolvasása: byte b; int i= b & 0xff; 32-bites int unsigned értékének kiolvasása: int i; long l= i & 0xffffffffL;
10
Embed
2 programozas 6 - cg.iit.bme.hucg.iit.bme.hu/portal/sites/default/files/oktatott-targyak/szoftver-labor-iii/... · 2009.10.01. 1 Java programozás alapjai A Java nyelv C++ szintaktikára
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
2009.10.01.
1
Java programozás alapjai
A Java nyelv
� C++ szintaktikára épít, számos különbséggel� Hello, World (alkalmazás, parancssorból indítható):
A HelloWorldApp.java fájl:
class HelloWorldApp {public static void main(String[] args) {
System.out.println("Hello World!");}}
A főosztály: neve = fájlnév, van benne main A program belépési pontja:
statikus metódus
cout << … << ‘\n’
Hello world futtatása
class HelloWorldApp {public static void main(String[] args) {
Implicit típuskonverzió� Implicit konverziót csak bővítésnél (widening primitive
conversion) lehet használni :byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double
� Egész típusok bővítő konverziója esetén az eredeti pontos értéket megőrizzük
� A byte -> char, illetve short -> charkonverziók nem tekinthetőek bővítésnek, mivel a charunsigned:byte b = 126; short s = 1000; char c; c = b; // compile error: possible loss of precision c = s; // compile error: possible loss of precision
� Az int -> float, long -> float, long -> doublekonverziók csökkenthetik a számábrázolás precizitását, ilyenkor az eredeti egész értékeket kerekítjük
Explicit típuskonverzió
� Szűkítésnél (narrowing primitive conversion) kötelező explicit konverziót (cast operatort) használni:double -> float -> long -> int > char -> short > byte
pl.: int i = 32; byte b = (byte)i;
� Szűkítés esetén az alsó biteket őrizzük meg, így előfordulhat, hogy az eredeti érték nagyságrendjét is elveszítjük
Explicit típuskonverzió
� Példák implicit/explicit konverzióra• int a = 1; // a == 1• float a = (float)1; // a == 1.0• float a = 1/2; // a == 0.0• float a = (float)1/2; // a == 0.5• int a = 3.14; // a == 3
Típuskonverzió függvényekkel
� Primitív és összetett típusok között nincs implicit/explicit konverzió• int → String
• String egy = Integer.toString(1);• String egy = “” + 1;
• String → int• int a = Integer.parseInt(“1”);
Egyszerű adattípusok specialitásai
Változó létrehozása default (zérus) kezdőértékkel:int i;
Változó létrehozása kezdőértékkel:int i = 5;
Egyszerű adattípusok deklarációja és definíciója (memória foglalás) egyszerre történik
Konstans változó a final kulcsszóval (C++ const):final double pi = 3.14159286;
Osztályok
Minden adatstruktúra osztály (class ) típusú nincs struct , union
public class Employee {
String name;
private long salary = 100;
public Employee(String n, long sal) {
name = n; salary = sal;
}
}
Változókhoz kezdőértéket rendelhetünk vagy alapért.
A törzs csak az osztályon belül lehet
Nem kell a végén pontosvessző
Az osztálymás csomagból is
csomagból
osztályból
bárhonnan
2009.10.01.
3
Osztályok
� objektumok prototípusa
� összefüggő adatok és metódusok gyűjteménye� pl. String objektum: karakterek tömbje és a rajtuk
végezhető műveletek
Osztály példány = objektum
� példányt mindig a new operátorral hozunk létre
� nem lehet objektumot lokális változóként létrehozni� a változónk mindig hivatkozást tartalmaz
Student s1; // deklaráció
s1 = new Student(“Ubul”, 3.5);
// definíció
� az = a hivatkozást másolja, az objektumot NEM! Student s2 = s1; // s2 ugyanaz az objektum
// lesz, mint s1!
Minden objektum dinamikus
C++ Java
class Vector { class Vector {int x, y; int x, y;}; }…. ….
Vector v; // stack-en Vector v = new Vector( );Vector *pvnull = NULL; Vector pvnull;Vector *pv = &v; Vector pv = v;Vector& rv = v; Vector rv = v;Vector *pvd = new Vector(); Vector pvd = new Vector( );
delete pvd; szemétgyűjtés
Érték versus Referencia típusok: C++
Dinamikus memóriából allokáltDeklaráció és helyfoglalás különLehet null “=” referenciát másol nem adatot
A tömbjeiben referenciák vannakNem úgy viselkedik, mint a beépítetttípusok
Globális memóriában vagy a vermenDeklaráció és helyfoglalás egyszerreSohasem null= adatot másol nem referenciát
A tömbjeiben elemek vannakAkárcsak a beépített típusok
int i, j=3;
i = j;
int array[10];
int * pi; Class* c;...pi = new int; c = new Class;*pi = 3; c->f( );
int * pj = pi; Class* c1 = c;
Class c;c.f( );
Class c1 = c;
Érték versus Referencia típusok: Java
Dinamikus memóriából allokáltLehet null = referenciát másol nem adatotA tömbjeiben referenciák vannak
OBJEKTUMOK
Globális memóriában vagy a vermenSohasem null= adatot másol nem referenciátA tömbjeiben elemek vannak
BEÉPÍTETT TÍPUSOK
int i, j=3;
i = j;
int array[10];
Class c;c.f( );
Class c1 = c;
int * pi; Class c;...pi = new int; c = new Class;*pi = 3; c.f( );
int * pj = pi; Class c1 = c;
int array[];array = new int[10];
Visszatérés objektummal
C++ Java
class Vector class Vector{ {… …Vector Add(const Vector& v) public Vector Add(Vector v){ {return Vector(x + v.x, y + v.y); return newVector(x + v.x, y + v.y);
} }… …
}; }
2009.10.01.
4
Egyszerű adattípusok osztályba csomagolása
Minden egyszerű adattípusnak létezik egy osztály típusú megfelelője, pl. int és Integer
� konverziós függvények� típusra jellemző konstansok
int i1 = 5;
Integer io = new Integer(i1);
Integer ios = new Integer(“135”);
int i2 = io.intValue();
float f = io.floatValue();
String s = io.toString();
i1 = Integer.MAX_VALUE;
Példa: generikus tár
C++ Java
1. Template nincs2. void pointer nincs pointer3. Alaposztályra Mi az alaposztály: Object !!!