Ellenőrzött kivétel vs futásidejű kivétel
A kivételek speciális eseménytípusok, amelyek megzavarhatják a normál programfolyamatot. A név kivétel a „kivételes esemény” eredetű. A kivétel dobása a kivételobjektum létrehozásának és a futásidejű rendszernek történő átadásának folyamata. Amikor a futásidejű rendszer megkapja a kivételobjektumot, megpróbálja megtalálni valakit, aki a hívásveremben kezeli, fordított sorrendben (amelyben a metódusokat hívták). A futásidejű rendszer akkor sikeres, ha talál egy módszert kivételkezelővel. A kivételkezelő olyan kódblokk, amely hivatalosan képes kezelni az említett kivételt. Ha a futásidejű rendszer megfelelő kezelőt talál, akkor a kivétel objektumot továbbítja a kezelőnek. Ezt hívják a kivétel elkapásának. Ha azonban a kivétel nem kezelhető, a program leáll. Java-bana kivételek a Throwable osztályból származnak. Az ellenőrzött kivételek azok a kivételek, amelyeknél a kezelést a fordító kényszeríti. A futásidejű kivételek olyan típusú kivételek, amelyeket a fordító nem ellenőriz.
Mi az ellenőrzött kivétel?
A bejelölt kivételek vagy a java.lang.exception osztály objektumai, vagy annak alosztályai (kivéve a java.lang. RuntimeException és annak alosztályait). Az ellenőrzött kivételeket a fordításkor „ellenőrzik”. Ez azt jelenti, hogy a programozónak vagy meg kell kapnia, vagy el kell dobnia ezeket a kivételeket, különben a fordítás panaszkodni fog (fordítói hibát okozva). Emiatt sok ellenőrzött kivétel nagyon jól ismert a programozók számára. Például az IOException és annak alosztályai ellenőrzik a kivételeket, és amikor a programozó egy fájl elérésével vagy módosításával foglalkozik, a fordító ellenőrzi, hogy az összes lehetséges IOExceptionről gondoskodik-e a programozó.
Mi a futásidejű kivétel?
A futásidejű kivételek a java.lang. RuntimeException és az összes alosztályból állnak. Elméletileg ugyanazt a célt szolgálják, mint az ellenőrzött kivételek, és dobhatók vagy kezelhetők, mint az ellenőrzött kivételek, de ezek kezelését a fordító nem érvényesíti. Ezért a futásidejű kivételek az ellenőrizetlen kivételek családjába tartoznak. A NullPointerException, a NumberFormatEception, a ClassCastException és az ArrayIndexOutOfBoundsException gyakori futásidejű kivétel a Java-ban.
Mi a különbség az ellenőrzött kivétel és a futásidejű kivétel között?
Bár mind az ellenőrzött kivételek, mind a futásidejű kivételek nem kívánatosak a program futtatása során, vannak különbségeik. Az ellenőrzött kivételkezelést a fordító kényszeríti ki, a futásidejű kivételeket azonban nem. Ezért az ellenőrzött kivételeket el kell dobni vagy kezelni kell a kód összeállításához, de a futásidejű kivételekre nincs ilyen követelmény. Következésképpen a futásidejű kivételek a nem ellenőrzött kivételek kategóriájába tartoznak a hibákkal együtt.
Hátrány az ellenőrzött kivételekkel, hogy a programozónak akkor is kezelnie kell, ha nem tudja, hogyan kell. Tehát, ha a programozó csak egy új kivételt dob, anélkül, hogy becsomagolná az eredetit, az eredeti kivételhez tartozó veremnyom elvész. Itt jönnek jól a futásidejű kivételek. Mivel az összes futásidejű kivétel egyetlen helyen kezelhető, így a programozók kevesebb mennyiségű kódot írhatnak. Másrészt, mivel be kell fogni az ellenőrzött kivételeket, a programozó nem okoz meglepetést. Mindig tudni fogja, hogy melyik ellenőrzött kivételt lehet kivetni egy bizonyos módszerrel. Ezzel ellentétben különféle futásidejű kivételeket lehet dobni a programozó tudta nélkül.