Hvordan multifangst fungerer - 1

"Noen flere interessante leksjoner. Å, som jeg elsker å undervise!"

"Jeg vil gjerne fortelle deg om hvordan flere fangstblokker fungerer. Det er veldig enkelt: når unntak oppstår i en prøveblokk , flyttes utførelsen til den første fangstblokken ."

"Hvis en type angitt i parentesen til catch-blokken samsvarer med typen av det kastede unntaket, starter utførelsen inne i den blokken. Ellers går vi til neste catch- blokk, hvor den samme kontrollen utføres."

"Hvis vi går tom for fangstblokker og unntaket ikke er fanget, vil det bli kastet på nytt, og den nåværende metoden vil avsluttes unormalt."

"Jeg skjønner. Fangstblokken som faller sammen med unntakstypen vil være den som utføres."

"Ja, riktig. Men i virkeligheten er det litt mer komplisert. Klasser kan arve andre klasser. Hvis en Cow-klasse arver en Animal-klasse, kan Cow-objektet refereres ikke bare av en Cow-variabel, men også av en Animal-variabel. "

"Og?"

"Fordi alle unntak arver Exception eller RuntimeException (som også arver Exception ), kan de fortsatt fanges opp ved å bruke 'catch ( Exception e)' eller ' catch (RuntimeException e) '."

"Og?"

"Vi kan trekke to konklusjoner. For det første kan du bruke "fangst (unntak e)" for å fange ethvert unntak. For det andre er rekkefølgen på fangstblokkene viktig. "

"Her er noen eksempler:"

"Det ArithmeticExceptionsom oppstår etter at vi deler med 0 vil bli fanget i den andre fangstblokken."

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 den bli fanget i den første catch-blokken, fordi alle unntak arver unntak, dvs. Exceptiondekker alle unntak. "

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 ArithmeticExceptionblir den ikke fanget opp. Den vil bli kastet tilbake til anropsmetoden."

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 oppklarte ting litt. Disse unntakene er ikke det enkleste temaet."

"Det virker bare slik. De er faktisk en av de enkleste tingene i Java."

"Jeg vet ikke om jeg skal være glad eller trist over det..."