A hibák a felhasználók és a programozók egyaránt hátráltatják. A fejlesztők nyilvánvalóan nem akarják, hogy programjaik minden fordulaton esjenek le, és a felhasználók ma már annyira hozzászoktak, hogy hibáik vannak azok a programok, amelyek bántalmazással elfogadják az ár megfizetését olyan szoftverért, amelynek szinte biztosan legalább egy hibája van azt. Jáva célja, hogy sportos esélyt adjon a programozónak a hibamentes alkalmazás tervezéséhez. Kivételt képeznek olyan kivételek, amelyekről a programozó tudomásul veszi a lehetőségeket, amikor egy alkalmazás kölcsönhatásba lép egy erőforrással vagy egy felhasználóval, és ezek a kivételek kezelhetők. Sajnos vannak olyan kivételek, amelyeket a programozó nem tud ellenőrizni, vagy egyszerűen figyelmen kívül hagyja. Röviden: az összes kivétel nem azonos, ezért a programozónak többféle típusa van, amelyekre gondolkodni kell.
Kivétel egy olyan esemény, amely miatt a program nem képes folyni a tervezett végrehajtás során. Háromféle kivétel létezik: az ellenőrzött kivétel, a hiba és a futásidejű kivétel.
Az ellenőrzött kivétel
Az ellenőrzött kivételek olyan kivételek, amelyekkel egy Java alkalmazásnak képesnek kell lennie. Például, ha egy alkalmazás adatokat olvas egy fájlból, akkor képesnek kell lennie a FileNotFoundException
. Végül is nincs garancia arra, hogy a várt fájl ott lesz, ahol állnia kell. Bármi megtörténhet a fájlrendszeren, amiről az alkalmazásnak semmiféle nyom nincs.
Hogy ezt a példát egy lépéssel tovább vehessük. Tegyük fel, hogy a FileReader
osztály karakterfájl olvasásához. Ha megnézi a A FileReader konstruktor meghatározása a Java alkalmazásban látni fogja a módszer aláírását:
nyilvános FileReader (karakterlánc fájlnév) a FileNotFoundException fájlt dobja.
Mint láthatja, a kivitelező kifejezetten kijelenti, hogy a FileReader
kivitelező dobhat a FileNotFoundException
. Ennek van értelme, mivel nagyon valószínű, hogy a fájl név
A karakterlánc időről időre rossz lesz. Nézd meg a következő kódot:
nyilvános statikus void main (karakterlánc [] args) { FileReader fileInput = null; // Nyissa meg a bemeneti fájlt. fileInput = új FileReader ("Untitled.txt"); }
Szintaktikailag az állítások helyesek, de ez a kód soha nem fordul elő. A fordító ismeri a FileReader
kivitelező dobhat a FileNotFoundException
és ez a kivétel a hívószám függvénye. Két lehetőség van: először átadhatjuk a kivételt módszerünkről az a megadásával dob
záradék is:
public statical void main (karakterlánc [] args) dob FileNotFoundException { FileReader fileInput = null; // Nyissa meg a bemeneti fájlt. fileInput = új FileReader ("Untitled.txt"); }
Vagy valóban kezelhetjük azzal a kivétellel:
nyilvános statikus void main (karakterlánc [] args) { FileReader fileInput = null; próbáld ki. { // Nyissa meg a bemeneti fájlt. fileInput = új FileReader ("Untitled.txt"); } fogás (FileNotFoundException ex) { // mondja meg a felhasználónak, hogy keresse meg a fájlt. } }
A jól megírt Java alkalmazásoknak képesnek kell lenniük az ellenőrzött kivételek kezelésére.
hibák
A kivétel második fajtáját hibának nevezzük. Kivétel esetén a JVM kivételes objektumot hoz létre. Ezek az objektumok mind a Eldobható
osztály. Az Eldobható
az osztálynak két fő alosztálya van: Hiba
és Kivétel
. Az Hiba
osztály azt a kivételt jelöli, amelyet az alkalmazás valószínűleg nem képes kezelni.
Ezek a kivételek ritkák. Például, a JVM-hez elfogyhatnak az erőforrások, mivel a hardver nem képes megbirkózni az összes folyamatával, amelyre ki kell terjednie. Lehetséges, hogy az alkalmazás észleli a hibát, hogy értesítse a felhasználót, de általában az alkalmazásnak bezárnia kell mindaddig, amíg a mögöttes probléma megoldódik.
Futásidejű kivételek
A futásidejű kivétel pusztán azért fordul elő, mert a programozó hibázott. Írta a kódot, ez nagyon jól néz ki a fordítónak, és amikor futtatni akarja a kódot, akkor az esik megpróbált hozzáférni egy tömb olyan eleméhez, amely nem létezik, vagy egy logikai hiba miatt a metódus null értékű volt érték. Vagy bármilyen hibát elkövethet egy programozó. De ez rendben van, ezeket a kivételeket kimerítő teszteléssel látjuk, ugye?
A hibák és a futásidejű kivételek a nem ellenőrzött kivételek kategóriájába tartoznak.