Ellenőrzött kivétel vs futásidejű kivétel
A kivételek olyan eseménytípusok, amelyek zavarhatják a normál programfolyamatot. A kivétel a „rendkívüli eseményből” származik. Kivétel dobása a kivétel objektum létrehozásának és a futási rendszernek való átadásának folyamata. Amikor a futásidejű rendszer megkapja a kivételes objektumot, megpróbálja megtalálni valakit, aki kezelni tudja azt a hívásveremben, fordított sorrendben (ahogyan a metódusokat hívták). A futásidejű rendszer sikeres, ha egy módszert talál kivételkezelővel. A kivételkezelő egy olyan kódblokk, amely hivatalosan képes kezelni az említett kivételt. Ha a futási rendszer megfelelő kezelőt talál, akkor a kivétel objektumot továbbítja a kezelőnek. Ezt nevezzük a kivétel megragadásának. Ha azonban a kivétel nem kezelhető, a program leáll. A Java-ban a kivételek a Throvable osztálytól származnak. Az ellenőrzött kivételek olyan kivételek, amelyeknél a kezelést a fordító kényszeríti. A futásidejű kivételek olyan kivételek, amelyeket a fordító nem ellenőriz.
Mi az ellenőrzött kivétel??
Az ellenőrzött kivételek vagy a java.lang.exception osztály, vagy annak alosztályának objektumai (kivéve a java.lang.RuntimeException és az alosztályok). Az ellenőrzött kivételeket a fordításkor „ellenőrzik”. Ez azt jelenti, hogy a programozónak meg kell ragadnia vagy dobnia ezeket a kivételeket, különben a fordító panaszkodik (fordító hibát okoz). Ezért számos 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 megbizonyosodjon arról, hogy a programozó gondoskodik-e az összes lehetséges IOException-ről..
Mi a futásidejű kivétel??
A futásidejű kivételek a java.lang.RuntimeException-t és annak összes alosztályát tartalmazzák. Elméletileg ugyanazt a célt szolgálják, mint az ellenőrzött kivételek, és dobhatók vagy kezelhetők, mint ellenőrzött kivételek, de ezek kezelését a fordító nem hajtja végre. 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 általános futási 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 események egy program végrehajtása során, vannak különbségeik. Az ellenőrzött kivételek kezelését a fordító hajtja végre, de a futásidejű kivételek nem. Ezért az ellenőrzött kivételeket el kell dobni vagy kezelni kell a kód összeállítása érdekében, de a futásidejű kivételekkel kapcsolatban nincs ilyen követelmény. Következésképpen a futásidejű kivételek az ellenőrizetlen kivételek kategóriájához tartoznak, a hibákkal együtt.
Hátránya az ellenőrzött kivételekkel szemben, hogy a programozónak még akkor is kezelnie kell, ha nem tudja, hogyan kell. Tehát, ha a programozó csak egy új kivételt dob be az eredeti csomagolása nélkül, akkor az eredeti kivételhez tartozó verem nyomkövetés elveszik. A futásidejű kivételek itt hasznosak. Mivel az összes futásiidejű kivétel egy helyen kezelhető, így a programozók kevesebb kódot írhatnak. Másrészről, mivel az ellenőrzött kivételeket be kell tartani, a programozónak nincs meglepetés. Mindig tudni fogja, hogy melyik ellenőrzött kivételt egy meghatározott módszerrel el lehet dobni. Ezzel ellentétben a futásidejű különféle kivételek a programozó ismerete nélkül is dobhatók.