1. Java ismétlés

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:43-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotJavaIsmetles}} __TOC__ ==1.1. osztályok, interfészek== ===Virtuális függvények=== * Minden függvény virtuális * Leszármazottban f…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti 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.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


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.