Jelenlegi hely

Utolsó változások

19.2.2 Runnable interfész példányosítása

A következő Clock applet a jelenlegi időt mutatja, és azt másodpercenként frissíti. A frissítés állandó, mivel az óra kijelzése egy saját szálon fut.

19.1. A Timer és a TimerTask osztály

Ebben a részben az időzítők használatát tárgyaljuk. A Timer osztály a java.util csomag része, a TimerTask osztály példányai ütemezését végzi. Reminder.java egy példa arra, hogy használjuk az időzítőket a késleltetett futtatáshoz:

19. Programszálak kezelése

A programok jelentős része soros végrehajtású. Van kezdetük, egy végrehajtandó rész és egy befejezés. A program csak bizonyos időszakaszokban fut, hiszen a processzor már programokat is futtat.

A szál (thread) hasonló a soros programhoz. A szálnak is van kezdete, egy végrehajtandó része és egy befejezése. A szál is csak bizonyos időszakaszokban fut. De a szál maga nem egy program, a szálat nem lehet önállóan futtatni. Inkább úgy tekinthetjük, hogy a program részeként fut. A következő ábra megmutatja a kapcsolatot.

16.2 Interfészek implementálása

Egy interfész viselkedési formákat definiál. Az interfészt megvalósító osztály deklarációjában szerepel az implements záradék. Az osztály akár egy vagy több interfészt is megvalósíthat. (Az interfészek között megengedett a többszörös öröklődés.)

Konvenció: az implements záradék az extends záradékot követi, ha mindkettő van.
A következő példa applet implementálja a StockWatcher interfészt.

16.1 Interfész definiálása

A következő ábra bemutatja az interfész definíció két összetevőjét: az interfész deklarációt és a törzset.

Interfész definiálása

A StockWatcher interfész deklarálja, de nem implementálja a valueChanged metódust. Az interfészt megvalósító osztályok fogják a metódust implementálni.

Interfész deklaráció

A következő ábra az interfész deklaráció minden részét bemutatja:

16. Interfészek

Az interfész olyan viselkedéseket definiál, amelyet az osztályhierarchia tetszőleges osztályával megvalósíthatunk. Egy interfész metódusok halmazát definiálja, de nem valósítja meg azokat. Egy konkrét osztály megvalósítja az interfészt, ha az összes metódusát megvalósítja.

Definíció: Az interfész implementáció nélküli metódusok névvel ellátott halmaza.
Mivel az interfész a megvalósítás nélküli, vagyis absztrakt metódusok listája, alig különbözik az absztrakt osztálytól. A különbségek:

20.5. Ellenőrző kérdések

  • Mi az író karaktercsatornák absztrakt őse?
  • Mi az olvasó karaktercsatornák absztrakt őse?
  • Mi az író bájtcsatornák absztrakt őse?
  • Mi az olvasó bájtcsatornák absztrakt őse?
  • Melyik metódus használható az összes olvasó csatorna esetén?
  • Melyik metódus használható az összes író csatorna esetén?
  • Mondjon példát memória-csatornára!
  • Írjon példát a File osztály szolgáltatásaira!
  • Mik a szűrő folyamok?

Igaz vagy hamis? Indokolja!

  • A RandomAccessFile egy szűrő folyam.

20.4. További osztályok és interfészek

Az előzőekben bemutatott osztályokon és interfészeken kívül a java.io csomag többek között a következő osztályokat és interfészeket tartalmazza:

File

Egy fájlt képvisel a natív fájlrendszerben. Létrehozhatunk a File objektumot egy állományhoz a natív fájlrendszerben, és adatokat kérdezhetünk le az állományról. Például a teljes elérési útját.

FileDescriptor

Egy fájlkezelőt valósít meg nyitott állományok és portok esetén. Nem sokszor használt.

20.3.1 A közvetlen elérésű állományok használata

A RandomAccessFile osztály mind írásra, mind olvasásra alkalmas, ellentétben a java.io csomag által tartalmazott ki-, és bemeneti adatfolyamokkal. Egy RandomAccessFile objektumot a szerint hozunk létre különböző paraméterekkel, hogy írni vagy olvasni akarunk vele. A RandomAccessFile nincs kapcsolatban a java.io csomag ki-, és bemeneti adatfolyamaival, és ez az, amiért nem az InputStream és OutputStream leszármazottja.

Oldalak