"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 |
---|
|
|
|
– 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 method1
az 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 fő módszer dobási listájához ."
– Mondana egy példát?
"Ezt nézd meg:"
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:"
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 : "
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."
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method3() throws ClassNotFoundException
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
}
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 ."