
"Ik wilde het vandaag nog over één ding hebben. In Java zijn alle uitzonderingen verdeeld in twee typen: aangevinkt en niet aangevinkt (degenen die moeten worden opgevangen en degenen die niet hoeven te worden opgevangen). Standaard moeten alle uitzonderingen zijn gevangen."
"Kun je opzettelijk uitzonderingen in je code gooien?"
"Je kunt elke uitzondering in je eigen code gooien. Je kunt zelfs je eigen uitzonderingen schrijven. Maar daar hebben we het later over. Laten we ons nu concentreren op uitzonderingen die door de Java-machine worden gegenereerd."
"OK."
"Als ClassNotFoundException of FileNotFoundException in een methode worden gegooid (optreden), moet de ontwikkelaar dit aangeven in de methodedeclaratie. Dit zijn gecontroleerde uitzonderingen. Zo ziet het er meestal uit:"
Voorbeelden van gecontroleerde uitzonderingen |
---|
|
|
|
"Dus we schrijven gewoon 'throws' gevolgd door een door komma's gescheiden lijst met uitzonderingen, toch?"
"Ja. Maar er is meer. Om het programma te compileren, method1
moet de methode die in het onderstaande voorbeeld aanroept een van de volgende twee dingen doen: ofwel deze uitzonderingen opvangen of ze opnieuw genereren (naar de aanroeper) , waarbij de opnieuw gegenereerde uitzonderingen in de verklaring worden aangegeven. "
"Nogmaals. Als je hoofdmethode een methode moet aanroepen waarvan de declaratie ' throws FileNotFoundException , …' bevat, dan moet je een van de volgende twee dingen doen:
1) Vang FileNotFoundException , …
U moet de code die de onveilige methode aanroept, verpakken in een try-catch- blok.
2) Vang FileNotFoundException niet , …
U moet deze uitzonderingen toevoegen aan de lijst met worpen van uw hoofdmethode ."
"Kun je me een voorbeeld geven?"
"Kijk hier eens even naar:"
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");
}
"De code in dit voorbeeld zal niet compileren, omdat de hoofdmethode methode1() aanroept , die uitzonderingen genereert die moeten worden opgevangen."
"Om het te laten compileren, moeten we uitzonderingsafhandeling toevoegen aan de hoofdmethode. Je kunt dit op twee manieren doen:"
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");
}
"En hier vangen we het met een try-catch :"
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");
}
"Het begint duidelijker te worden."
"Kijk naar het volgende voorbeeld. Het zal je helpen de rest te begrijpen."
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.");
}
}
"Er is nog een type exception, de RuntimeException en klassen die deze overerven. Je hoeft ze niet op te vangen. Dit zijn ongecontroleerde exceptions. Ze worden als moeilijk te voorspellen beschouwd. Je kunt ze op dezelfde manier afhandelen, maar je hoeven ze niet aan te geven in een throws- clausule."
GO TO FULL VERSION