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.");
    }
}
3
Feladat
Java Syntax,  szintlecke
Zárt
Code entry
Your attention, please! Now recruiting code entry personnel for CodeGym. So turn up your focus, let your fingers relax, read the code, and then... type it into the appropriate box. Code entry is far from a useless exercise, though it might seem so at first glance: it allows a beginner to get used to and remember syntax (modern IDEs seldom make this possible).

"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 ."