Hoe multicatch werkt - 1

"Nog een paar interessante lessen. Oh, wat hou ik van lesgeven!"

"Ik wil je graag vertellen hoe meerdere catch- blokken werken. Het is heel eenvoudig: wanneer er uitzonderingen optreden in een try- blok, gaat de uitvoering naar het eerste catch- blok."

"Als een type tussen haakjes van het catch-blok overeenkomt met het type van de gegenereerde uitzondering, begint de uitvoering binnen dat blok. Anders gaan we naar het volgende catch- blok, waar dezelfde controle wordt uitgevoerd."

"Als we geen catch- blokken meer hebben en de uitzondering niet is opgevangen, wordt deze opnieuw gegenereerd en wordt de huidige methode abnormaal beëindigd."

"Ik begrijp het. Het catch-blok dat samenvalt met het uitzonderingstype wordt uitgevoerd."

"Ja, klopt. Maar in werkelijkheid is het een beetje ingewikkelder. Klassen kunnen andere klassen erven. Als een Cow-klasse een Animal-klasse erft, kan er niet alleen naar het Cow-object worden verwezen door een Cow-variabele, maar ook door een Animal-variabele. "

"En?"

"Omdat alle uitzonderingen Exception of RuntimeException erven (die ook Exception erven ), kunnen ze nog steeds worden opgevangen met 'catch ( Exception e)' of ' catch (RuntimeException e) '."

"En?"

"We kunnen twee conclusies trekken. Ten eerste kun je 'catch (Exception e)' gebruiken om elke uitzondering op te vangen. Ten tweede is de volgorde van catch-blokken van belang. "

"Hier zijn enkele voorbeelden:"

" ArithmeticExceptionWat gebeurt nadat we delen door 0, wordt opgevangen in het tweede catch-blok."

Code
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.");
}

"In het onderstaande voorbeeld ArithmeticExceptionwordt het gevangen in het eerste catch-blok, omdat alle uitzonderingen de uitzondering erven, dwz Exceptionalle uitzonderingen dekken. "

Code
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.");
}

"In het onderstaande voorbeeld ArithmeticExceptionwordt niet gepakt. Het wordt teruggestuurd naar de belmethode."

Code
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.");
}

"Dat verhelderde de zaken een beetje. Deze uitzonderingen zijn niet het makkelijkste onderwerp."

'Het lijkt alleen maar zo. Ze zijn eigenlijk een van de eenvoudigste dingen op Java.'

"Ik weet niet of ik daar blij of verdrietig over moet zijn..."