"Ah. Der er du. Jeg har ledt efter dig."

"Skete der noget?"

"Nej, men vi studerer stadig."

"OK. Jeg lytter."

"Jeg vil gerne fortælle dig et par ting mere om undtagelser:"

"I Java 7 blev try-catch -konstruktionen udvidet en smule gennem tilføjelse af flere catch- blokke. Se på dette eksempel:"

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å nu kan vi skrive flere undtagelser adskilt af OR-operatorer ('|' er binær ELLER)?"

"Det er rigtigt. Er det ikke praktisk?"

"Hmm. Men hvad vil typen af ​​undtagelsen objekt inde i catch blokken?"

"En IOException har trods alt sine metoder, og en SQLException har sine metoder."

"Undtagelsestypen vil være deres fælles forfaderklasse."

"Ah. Med andre ord vil det højst sandsynligt være Exeption eller RuntimeException . Hvorfor så ikke bare skrive catch(Exception e)?"

"Nogle gange, når man håndterer fejl individuelt, er det praktisk at gruppere dem, skrive nogle fejl til en log, genkaste andre og håndtere andre på en anden måde."

"Med andre ord er denne ordning anerkendt som at løse problemet med duplikerede fangblokke til håndtering af forskellige fejl."

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

"Det er ikke alt. Jeg vil gerne fortælle dig lidt mere om den endelige blok."

"Som du sikkert allerede ved, udføres denne blokering altid."

"Og når jeg siger altid, mener jeg absolut altid ."

"For eksempel:"

Eksempel ved hjælp af endelig
try
{
 return 1;
}
 finally
{
 return 0;
}

"Her er der et afkast i prøveblokken og et afkast i den endelige blok. Så denne metodes returværdi vil være tallet 0."

"Den endelige blok vil udføres uanset hvad der sker. Og dens retursætning overskriver den anden returværdi med sin egen værdi."

"Jeg ser."

"Men en metode kan enten returnere en værdi eller give en undtagelse. "

"Så hvis en værdi returneres i en prøveblok, men den endelige blok afgiver en undtagelse , så vil resultatet være en undtagelse . "

"Hvad hvis en undtagelse kastes i try- blokken, men finally - blokken har en return-sætning?"

”Så er det, som om metoden fungerede ordentligt, og værdien i afkastopgørelsen 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 grund til, at finally-metoden muligvis ikke udføres, ville være programmets øjeblikkelige afslutning ved et kald til System.exit (); -metoden."

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

"Jeg ser."

"Husk på, at alle disse emner normalt bliver spurgt om i interviews, så det ville være godt for dig at forstå og huske dem."