OotJavaIsmetles2011
A VIK Wikiből
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();
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
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()
%ATTACHURL%/kollekciok.png
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)

