
"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 ."
GO TO FULL VERSION