„OotJavaIsmetles2011” változatai közötti eltérés
A VIK Wikiből
Új oldal, tartalma: „<div style="background:oldlace;padding:10px;border:1px solid lightgrey;"> '''Ez az oldal a tárgy 2011 anyagának összefoglalója. A korábbi évek anyagai lettek áth…” |
Nincs szerkesztési összefoglaló |
||
183. sor: | 183. sor: | ||
-- [[PallosTamas|Velias]] - 2009.05.26. | -- [[PallosTamas|Velias]] - 2009.05.26. | ||
--[[Szerkesztő:Ferrero|Ferrero]] ([[Szerkesztővita:Ferrero|vita]]) 2012. december 14., 15:38 (CET) SzaboCsaba - 2012.12.14. | |||
[[Category:Infoszak]] | [[Category:Infoszak]] |
A lap 2012. december 14., 15:38-kori változata
Ez az oldal a tárgy 2011 anyagának összefoglalója. A korábbi évek anyagai lettek áthozva és kiegészítve. Az 2011 előtti változata itt érhető el.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.
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
%ATTACHURL%/szalak_allapotai.PNG
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.
--Ferrero (vita) 2012. december 14., 15:38 (CET) SzaboCsaba - 2012.12.14.