1. előadás
Előadó: Kozsik Tamás
Kezdés: 10:15
Minden előadáson kvízek (15-20 percenként)
Java
- C alapú szintax
- OOP
- Class - based
- Imperatív
- JVM (Java Virtual Machine)
- Platformfüggetlen
- ~~Write~~ Compile once, run everywhere
- Erősen típusos
- Statikus + dinamikus típusrendszer
- Generikus, ~~Konkurens~~ nyelvi eszközök
- Erőforrásintenzív
Hello World:
class HelloWorld {
public static void main( String[] args ){
System.out.println("Hello world!");
}
}
Tanuljuk meg, mint egy mantrát :)
Objektumelvű programozás
Egységbezárás
Adat és rajta értelmezett alapműveletek
- "Pont" objektum
- "Racionális szám" objektum
- "Sorozat" objektum
- "Ügyfél" objektum
Metódusok
Java:
C:
Osztály
Példányosítás (instantiation)
- Objektum létrehozása osztály alapján
- Javában: mindig a heapen
- (Heap: dinamikusan allokált)
Példa: szövegek
String name = "James Arthur Gosling"
String[] names = name.split(" ");
String abbrev = names[names.length-1] + ", "
+ names[0].charAt(0) + ".";
Java program lefordítása
Java programok felépítése
- [modul (module)]
- csomag (package)
- osztály (class)
- tag (member)
- adattag (mező, field)
- metódus (method)
Java forrásfájl
- Osztálynévvel
- Kis- és nagybetű érzékeny
.javakiterjesztés- Fordítási egység
- Csomagjának megfelelő könyvtár
- Karakter kódolás
Megjegyzés: CamelCase naming convension
Fordítás, futtatás
- A "Tárgykód" a JVM bájtkód (.class)
- Nem szerkesztjük statikusan
- Futtatás: bájtkód interpretálás + JIT
- JIT: Just-in-time compilation
Java programok futása
- Végrehajtási verem (execution stack)
- Aktivációs rekordok
- Lokális változók
- Paraméterátadás
- Aktivációs rekordok
- Dinamikus tárhely (heap)
- Objektumok tárolása
Absztrakció
- Egységbezárás (encapsulation)
- Információelrejtés
Osztály, objektum, példányosítás
Point.java
Main.java
class Main
{
public static void main(String[] args) // főprogram
{
Point p = new Point(); // példányosítás (heap)
p.x = 3; // (innentől) objektumok
p.y = 5; // állapotának változtatása
}
}
Előáll egy Main.class és egy Point.class
$ ls
Main.java Point.java
$ javac *.java
$ ls
Main.class Main.java Point.class Point.java
$ java Main
Mezők alapértelemezett inicializációja
class Point {
int x = 3, y = 3;
}
class Main {
public static void main( String[] args ) {
Point p = new Point();
System.out.println(p.x + " " + p.y);
}
}
Osztály metódusok
class Point {
int x, y;
void move( int dx, int dy ) {
// (`this`: implicit paraméter)
this.x += dx;
this.y += dy;
// ebben az esetben elhagyható a this:
// y += dy;
}
}
class Main {
public static void main( String[] args ) {
Point p = new Point();
p.move(3,3); // p -> this, 3 -> dx, 3 -> dy
}
}
Konstruktorok
class Point
{
int x, y;
Point(int x, int y) // elfedés
{
this.x = x;
this.y = y;
}
}
class Main
{
public static void main( String[] args )
{
Point p = new Point(0,3);
System.out.println(p.x + " " + p.y);
}
}
- Metódusoknál mindig van megadva visszatérési érték típus
- Konstruktornál sosincs
- Automatikusn generál default konstruktort, ha nem csinálunk