Kivétel típusok

"Ma még egy dologról akartam beszélni. A Java-ban minden kivétel két típusra oszlik: ellenőrzött és nem ellenőrzött (azokra, amelyeket el kell fogni, és amelyekre nem kell). Alapértelmezés szerint minden kivételnek meg kell elkapták."

– Tudsz szándékosan kivételeket dobni a kódodba?

"Bármilyen kivételt megadhat a saját kódjában. Akár saját kivételeket is írhat. De erről később fogunk beszélni. Most koncentráljunk a Java gép által dobott kivételekre."

"RENDBEN."

"Ha a ClassNotFoundException vagy a FileNotFoundException ki van dobva (előfordul) egy metódusban, akkor ezeket a fejlesztőnek jeleznie kell a metódus deklarációjában. Ezek ellenőrzött kivételek. Általában így néz ki:"

Példák ellenőrzött kivételekre
public static void method1() throws ClassNotFoundException, FileNotFoundException

public static void main() throws IOException
public static void main() // Doesn't throw any exceptions

– Tehát csak a „dobásokat” írjuk, majd a kivételek vesszővel tagolt listáját, igaz?

"Igen. De van még több. A program fordításához method1az alábbi példában meghívó metódusnak két dolog egyikét kell tennie: vagy elkapja ezeket a kivételeket, vagy visszaküldi őket (a hívónak) , jelezve az újradobott kivételeket a deklarációjában. "

"Ismét. Ha a fő metódusnak olyan metódust kell meghívnia, amelynek deklarációja a következőt tartalmazza: " throws FileNotFoundException , …", akkor két dolog egyikét kell tennie:

1) Catch FileNotFoundException ,…

A nem biztonságos metódust hívó kódot egy try-catch blokkba kell csomagolnia .

2) Ne kapja el a FileNotFoundExceptiont ,…

Ezeket a kivételeket hozzá kell adnia a módszer dobási listájához ."

– Mondana egy példát?

"Ezt nézd meg:"

Példák ellenőrzött kivételekre
public static void main(String[] args)
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"A példában szereplő kód nem fordul le, mert a fő metódus meghívja a method1() -t , ami kivételeket dob, amelyeket el kell fogni."

"A fordításhoz hozzá kell adnunk a kivételkezelést a fő metódushoz. Ezt kétféleképpen teheti meg:"

1. lehetőség: Egyszerűen visszaadjuk a kivételt (a hívónak):
public static void main(String[] args)  throws FileNotFoundException, ClassNotFoundException 
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"És itt elkapjuk egy próbafogással : "

2. lehetőség: Kapja el a kivételt:
public static void main(String[] args)
{
    try
    {
        method1();
    }
    catch(Exception e)
    {
    }
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

– Kezd világosabb lenni.

"Nézze meg a következő példát. Segít megérteni a többit."

A kivételek kezelése helyett visszadobjuk őket a hívásveremben lejjebb lévő metódusokra, akik tudják, hogyan kell kezelni őket:
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
    method1();
}
Kezeljen egy kivételt, és dobjon egy másikat:
public static void method3() throws ClassNotFoundException
{
   try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
}
Mindkét kivételt elkapni, egyiket sem dobni:
public static void method4()
{
    try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
    catch (ClassNotFoundException e)
    {
        System.out.println("ClassNotFoundException has been caught.");
    }
}

"Van még egy kivételtípus, a RuntimeException és az azt öröklő osztályok. Nem kell elkapni őket. Ezek ellenőrizetlen kivételek. Nehéz megjósolni őket. Ugyanúgy kezelheted őket, de nem kell feltüntetni őket egy dobászáradékban ."