Ellenőrzött kivétel vs futásidejű kivétel
A kivételek különleges típusú események, amelyek megzavarhatják a normál műsorfolyamot. A név kivétel a „kivételes eseményből” származik. A kivétel dobása egy kivételobjektum létrehozásának és a futásidejű rendszernek való átadásának folyamata. Amikor a futásidejű rendszer megkapja a kivételobjektumot, megpróbál keresni valakit, aki kezelni fogja azt a hívási veremben úgy, hogy fordított sorrendben (a metódusok meghívásának megfelelően) bejárja. A futásidejű rendszer akkor sikeres, ha kivételkezelővel rendelkező metódust talál. A kivételkezelő egy kódblokk, amely hivatalosan képes kezelni az említett kivételt. Ha a futásidejű rendszer talál megfelelő kezelőt, átadja a kivételobjektumot 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-ban a kivételek a Throwable osztályból öröklődnek. A bejelölt kivételek olyan kivételek, amelyek kezelését a fordító kényszeríti ki. A futásidejű kivételek a kivételek egy fajtája, amelyeket a fordító nem ellenőriz.
Mi az a bejelölt kivétel?
A bejelölt kivételek vagy a java.lang.exception osztály vagy annak alosztályai objektumai (kivéve a java.lang. RuntimeException és alosztályai). Az ellenőrzött kivételeket a fordításkor „ellenőrzik”. Ez azt jelenti, hogy a programozónak vagy el kell fogadnia vagy el kell dobnia ezeket a kivételeket, különben a fordítás panaszkodik (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őrzött kivételek, és amikor a programozó egy fájl elérésével vagy módosításával foglalkozik, a fordító ellenőrzi, hogy a programozó minden lehetséges IOExceptionről gondoskodjon.
Mi az a futásidejű kivétel?
A futásidejű kivételek a java.lang. RuntimeException-ből és annak összes alosztályából állnak. Elméletileg ugyanazt a célt szolgálják, mint az ellenőrzött kivételek, és kidobhatók, vagy ellenőrzött kivételként kezelhetők, de kezelésüket a fordító nem kényszeríti ki. Ezért a futásidejű kivételek a nem ellenőrzött kivételek családjába tartoznak. A NullPointerException, a NumberFormatEception, a ClassCastException és az ArrayIndexOutOfBoundsException gyakori futásidejű kivételek 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 nemkívánatos előfordulások egy program végrehajtása során, vannak különbségeik. Az ellenőrzött kivételkezelést a fordító kényszeríti ki, de a futásidejű kivételeket nem. Ezért az ellenőrzött kivételeket ki kell dobni vagy kezelni kell a kód fordí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ába tartoznak a hibákkal együtt.
Hátrány ellenőrzött kivételekkel, hogy a programozónak akkor is kezelnie kell, ha nem tudja, hogyan kell. Tehát, ha a programozó új kivételt dob az eredeti becsomagolása nélkül, akkor az eredeti kivételhez tartozó veremnyom elveszik. Itt jönnek jól a futásidejű kivételek. Mivel az összes futásidejű kivétel egy helyen kezelhető, így a programozók kevesebb kódot tudnak írni. Másrészt, mivel az ellenőrzött kivételeket el kell fogni, nincs meglepetés a programozó számára. Mindig tudni fogja, hogy egy bizonyos módszer melyik ellenőrzött kivételt dobhatja ki. Ezzel ellentétben a programozó tudta nélkül különböző futásidejű kivételek dobhatók fel.