"Ah. Der er du. Jeg har lett etter deg."

"Skjedde det noe?"

— Nei, men vi studerer fortsatt.

"OK. Jeg lytter."

"Jeg vil fortelle deg et par ting til om unntak:"

"I Java 7 ble try-catch -konstruksjonen utvidet litt ved å legge til flere catch- blokker. Se på dette eksemplet:"

Java 5
try
{
  …
}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Java 7
try
{
  …
}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"Så nå kan vi skrive flere unntak atskilt med OR-operatorer ('|' er binær ELLER)?"

"Det stemmer. Er ikke det praktisk?"

"Hmm. Men hva vil typen av unntaksobjektet inne i fangstblokken?"

"Tross alt har en IOException sine metoder, og en SQLException har sine metoder."

"Unntakstypen vil være den for deres felles stamfarklasse."

"Ah. Med andre ord, det vil mest sannsynlig være Exeption eller RuntimeException . Så hvorfor ikke bare skrive catch(Exception e)?"

"Noen ganger når du håndterer feil individuelt, er det praktisk å gruppere dem, skrive noen feil til en logg, kaste andre på nytt og håndtere andre på annen måte."

"Med andre ord er denne ordningen anerkjent for å løse problemet med dupliserte fangstblokker for å håndtere forskjellige feil."

"Ah. Jeg forstår det. Takk, Ellie."

"Det er ikke alt. Jeg vil fortelle deg litt mer om den endelige blokken."

"Som du sikkert allerede vet, blir denne blokkeringen alltid utført."

"Og når jeg sier alltid, mener jeg absolutt alltid ."

"For eksempel:"

Eksempel ved å bruke til slutt
try
{
 return 1;
}
 finally
{
 return 0;
}

"Her er det en retur i prøveblokken , og en retur i den endelige blokken. Så denne metodens returverdi vil være tallet 0."

"Den endelige blokken vil utføres uansett hva som skjer. Og dens retursetning overskriver den andre returverdien med sin egen verdi."

"Jeg skjønner."

"Men en metode kan enten returnere en verdi eller gi et unntak. "

"Så, hvis en verdi returneres i en prøveblokk, men den endelige blokken kaster et unntak , vil resultatet være et unntak . "

"Hva om et unntak blir kastet i try- blokken, men finally - blokken har en retursetning?"

«Da er det som om metoden fungerte som den skal og verdien i returoppgaven returneres.

Eksempel Resultat
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
RuntimeException
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

"Den eneste grunnen til at finally-metoden kanskje ikke blir utført, vil være programmets umiddelbare avslutning ved et kall til System.exit (); -metoden."

Eksempel
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Jeg skjønner."

"Husk at alle disse emnene vanligvis blir spurt om i intervjuer, så det ville være bra for deg å forstå og huske dem."