Sådan fungerer multi-catch - 1

"Et par interessante lektioner mere. Åh, hvor elsker jeg at undervise!"

"Jeg vil gerne fortælle dig om, hvordan flere catch- blokke fungerer. Det er meget enkelt: Når der opstår undtagelser i en try- blok, flyttes eksekveringen til den første catch- blok."

"Hvis en type angivet i parentesen af ​​catch-blokken matcher typen af ​​den kastede undtagelse, så starter udførelsen inde i den blok. Ellers går vi til næste catch- blok, hvor den samme kontrol udføres."

"Hvis vi løber tør for fangstblokke , og undtagelsen ikke er blevet fanget, vil den blive smidt om, og den nuværende metode vil afslutte unormalt."

"Jeg kan se. Fangstblokken, der falder sammen med undtagelsestypen, vil være den, der udføres."

"Ja, rigtigt. Men i virkeligheden er det lidt mere kompliceret. Klasser kan arve andre klasser. Hvis en Cow-klasse arver en Animal-klasse, kan Cow-objektet ikke kun refereres af en Cow-variabel, men også af en Animal-variabel. "

"Og?"

"Fordi alle undtagelser arver Exception eller RuntimeException (som også arver Exception ), kan de stadig fanges ved at bruge 'catch ( Exception e)' eller ' catch (RuntimeException e) '."

"Og?"

"Vi kan drage to konklusioner. For det første kan du bruge 'fangst (undtagelse e)' til at fange enhver undtagelse. For det andet har rækkefølgen af ​​fangstblokke betydning. "

"Her er nogle eksempler:"

"Det ArithmeticException, der opstår, efter at vi har divideret med 0, vil blive fanget i den anden catch-blok."

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"I eksemplet nedenfor ArithmeticExceptionvil de blive fanget i den første catch-blok, fordi alle undtagelser arver Undtagelse, dvs. Exceptiondækker alle undtagelser. "

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"I eksemplet nedenfor, ArithmeticExceptionvil den ikke blive fanget. Den vil blive gendannet til opkaldsmetoden."

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Det klarede tingene lidt. Disse undtagelser er ikke det nemmeste emne."

"Det ser kun sådan ud. De er faktisk en af ​​de enkleste ting i Java."

"Jeg ved ikke, om jeg skal være glad eller ked af det..."