1. Java ismétlés (2012)
A VIK Wikiből
(OotJavaIsmetles2012 szócikkből átirányítva)
Az oldal rengeteg hibát tartalmaz, tanulj inkább a diákból!
Jelöld a hibákat. Ezzel a kijelentéssel érdemileg nem javítottál a wiki-n. --Szabó Csaba (vita) 2013. május 29., 17:28 (UTC)
1.1. osztályok, interfészek
Virtuális függvények
- Minden függvény virtuális
- Leszármazottban függvény felüldefiniálás esetén mindig a dinamikus (leszármazott) típus szerinti függvény hívódik meg:
class A { public void foo() { System.out.println("A"); } public void bar() { foo(); } } class B extends A { public void foo() { System.out.println("B"); } } ... A a1 = new A(); // statikus tipus A, din. tip. A A a2 = new B(); // statikus tipus A, din. tip. B a1.foo(); // "A" a2.foo(); // "B" a1.bar(); // "A" a2.bar(); // "B"
Object ősosztály
- Szinte minden típusnak ő az őse, kivéve az alaptípusok (int, float, double, stb.)
- boolean equals(Object o) - tartalom alapú összehasonlítás
- == - cím szerinti összehasonlítás
- int hashCode() - hash kulcs generálása (pl. hash-táblák használata esetén szükséges)
- Object clone() - lemásolja az objektumot (deep/shallow copy)
- void finalize() - Garbage Collector által hívott "destruktor", erőforrások felszabadítására
- wait(), notify(), notifyAll() - szálak bevárása, felébresztés
- Class getClass() - reflection elkérése
Boxing
- ~: Alaptípusok (int, float, double, stb.) becsomagolása objektumba
- Integer osztályban -128 < x <=127 tartományban automatikusa, beépített módon, különben elő kell állítani
new Integer(3) == new Integer(3) new Integer(300) != new Integer(300)
Interfész
1.1. Belső osztályok
- elérik a tartalmazó osztálypéldány változóit
- tagosztály: (akár) elérhető kívülről
- lokális osztály: blokkon belül
- anonim osztály:
addWindowListener(new WindowListener() { public void windowClosing(WindowEvent e) { System.ext(0);} });
1.2. Memóriakezelés
- Beépített Garbage Collector
- Törléskor finalize() meghívódik
- Egymásra hivatkozásokat, köröket felismeri
- Manuálisan is hívható:
System.gc(); Runtime.gc();
Megj: A runtime.gc és a system.gc is hívható manuálisan de ettől NEM biztos hogy lefut a GC ez csak jelzés értékű, hogy szerinted itt lenne érdemes gc-t futtatni, ám azt hogy fut-e a vm mondja meg. Lehet GC stratégiákat választani van többféle is, ez csak érdekesség :) --Törcsi (vita) 2014. január 6., 08:03 (UTC)
1.3. Szálkezelés
Thread (osztály)
- állapotátmenetek
- run() - futtatandó kód
- start() - szál indítása
- yield() - lemondás a futásról
- sleep() - várakozás
- interrupt() - várakozás megszakítása
- join() - futás megszakítása
- tulajdonságok:
- getId() - azonosító
- get/setName() - név
- get/setPriority() - prioritás
- isAlive() - fut-e
- isDaemon() - daemon-ként fut-e
Szálak állapotai
Runnable interfész
- run()
Kölcsönös kizárás
- objektumonként monitor + várakozási sor
Hashtable<String, Integer> ht = ...; public void increment(String s) { synchronized (ht) { int i = ht.get(s); i++; ht.put(s,i); }}
- synchronized: blokk vagy metódus előtt
volatile
- biztosítja, hogy az értékadás/lekérdezés atomi művelet legyen
- long és double pl 64 bitesek, több szálnál ezeknek volatile-oknak kell lenniük, különben hazárdos lehet az értéke (JVM 32 bittel dolgozik)
szinkronizálás (Object osztály metódusai)
- wait([timeout]) várakozási sorba kerül
- notify() egyet felébreszt
- notifyAll() összeset felébreszti
1.3. Genericitás
- <E> - E típusú
- <?> - konvertálható bármivé, így <Object>-vé is, viszont visszafele nem megy
- <? extends E> - ?, ami a E-ből származik
- <? super E> - ?, ami E ősosztálya
1.4. Kollekciók
Collection<E> (általánosan)
- add(E e), addAll(Collection<? extends E> c)
- remove(E e), removeAll(Col<? ext E> c)
- contains(E e), containsAll(Col<? ext E> c)
- size(), isEmpty()
- clear(), retainAll(Col<? ext E> c)
- equals(E e)
- Object[] toArray(), <T> T[] toArray(T[] ta), Iterator<E> iterator()
Iterator
- hasNext(), next(), remove()
- Set, SortedSet, List, ListIterator, Queue, Map
ciklusCollection<Integer> c = ...; for (Integer i : c) { System.out.println(i); }
Szemafor pszeudokód
Init(Semaphore s, Integer v){ s := v; } P(Semaphore s) { // Acquire Resource wait until s > 0; then s := s-1; /* must be atomic once s > 0 is detected */ } V(Semaphore s) { // Release Resource s := s+1; /* must be atomic */ }
--+++ Szemafor JAVA
public class Semaphore{ private int s; public Semaphore(int v) { s = v;--~~~~ } synchronized public void P() throws InterruptedException { while (s <= 0) {wait();} s--; } synchronized public void V() { s++; notify(); } }
-- Maestro - 2012.01.02.
-- MeszegetoBalazsIstvan - 2008.05.27.
-- Velias - 2009.05.26.
--Szabó Csaba (vita) 2012. december 14., 15:47 (CET)