Kedjebundna undantag i Java
Chained Exceptions i Java tillåter att associera ett undantag med ett annat, dvs ett undantag beskriver orsaken till ett annat undantag.
- Tänk till exempel på en situation där en metod kastar en ArithmeticException på grund av ett försök att dividera med noll.
- Men grundorsaken till felet var ett I/O-fel som gjorde att divisorn var noll.
- I sådana fall hjälper kedjade undantag att sprida både de primära och underliggande orsakerna till felet.
Exempel : Följande exempel visar hur man använder kedjade undantag i Java.
Java // Working of chained exceptions public class Geeks { public static void main ( String [] args ) { try { // Creating an exception NumberFormatException ex = new NumberFormatException ( 'Primary Exception' ); // Setting the cause of the exception ex . initCause ( new NullPointerException ( 'Root cause of the exception' )); // Throwing the exception with a cause throw ex ; } catch ( NumberFormatException ex ) { // Displaying the primary exception System . out . println ( 'Caught Exception: ' + ex ); // Displaying the root cause of the exception System . out . println ( 'Cause of Exception: ' + ex . getCause ()); } } }
Produktion
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Notera: Med kedjade undantag, även kända som kapslade undantag, kan vi associera en orsak med ett undantag i Java. Detta är användbart när vi vill sprida information om den ursprungliga orsaken till ett undantag.
Konstruktörer
- Kastbar (kastbar orsak) : Där orsak är undantaget som orsakar det aktuella undantaget.
- Kastbar (String msg Kastbar orsak) : Där msg är undantagsmeddelandet och orsak är undantaget som orsakar det aktuella undantaget.
Metoder för kastbara stödjande kedjade undantag
- getCause() : Denna metod returnerar den faktiska orsaken till ett undantag.
- initCause(Uppkastbar orsak) : Den här metoden anger orsaken till det anropande undantaget.
Exempel: Använda ett anpassat meddelande med kedjade undantag
I Java kan vi kedja undantag med hjälp av konstruktorn för klassen Throwable.
Java // Use a custom message with chained exception public class Geeks { public static void main ( String [] args ) { try { // Code that might throw an exception int [] n = new int [ 5 ] ; int divisor = 0 ; for ( int i = 0 ; i < n . length ; i ++ ) { int res = n [ i ] / divisor ; System . out . println ( res ); } } catch ( ArithmeticException e ) { // Creating a new exception with // the original as the cause throw new RuntimeException ( 'Error: Division by zero occurred' e ); } } }
Produktion:
Förklaring: I det här exemplet en matris med heltal och sätter divisorn till 0.
- Inuti försöksblocket försöker den dela varje element i arrayen med 0 vilket ger ett ArithmeticException.
- Detta ArithmeticException fångas i catch-blocket där ett nytt RuntimeException skapas med det ursprungliga undantaget, dvs ArithmeticException som orsak.
- Eftersom RuntimeException inte fångas upp som visar stackspåret inklusive RuntimeException och ArithmeticException.
Fördelar med kedjade undantag:
Fördelarna med kedjade undantag listas nedan:
- Detta undantag hjälper till vid felsökning genom att tillhandahålla information om både primära och rotorsaker.
- Det förenklar felhanteringen genom att möjliggöra spridning av fullständig undantagskontext.
- Detta förbättrar spårbarheten av fel i komplexa applikationer.
Nackdelar med kedjade undantag:
- Om den inte används på rätt sätt kan den göra stacken längre och svårare att läsa.
- Överanvändning kan orsaka förvirrande felmeddelanden om undantag är kedjade i onödan.
- Utvecklare måste se till att meningsfulla orsaker är kopplade; annars kan det vilseleda under felsökning.
Vad är huvudsyftet med kedjade undantag i Java?
- A
För att dölja grundorsaken till ett undantag
- B
Att associera ett undantag med ett annat
- C
För att förbättra kodprestandan
- D
För att automatiskt åtgärda körtidsfel
Med kedjade undantag kan man länka ett undantag till ett annat för att visa grundorsaken.
Vilken metod används för att fastställa orsaken till ett undantag?
- A
getMessage()
- B
setException()
- C
initCause()
- D
initCause()
Metoden initCause() anger den underliggande orsaken till ett undantag.
Vilken typ av undantag anges i exemplet som orsak till NumberFormatException?
- A
IOException
- B
ArithmeticException
- C
NullPointerException
- D
RuntimeException
Exemplet anger ett NullPointerException som orsak till NumberFormatException.
Quiz har slutförts framgångsrikt. Ditt resultat: 2 /3 Noggrannhet: 0 % Logga in för att se förklaring 1 /3 1 /3 < Previous Nästa >