Javan ketjutetut poikkeukset mahdollistavat yhden poikkeuksen yhdistämisen toiseen, eli yksi poikkeus kuvaa toisen poikkeuksen syytä.
- Tarkastellaan esimerkiksi tilannetta, jossa menetelmä heittää an Aritmeettinen poikkeus nollalla jakamisyrityksen takia.
- Mutta virheen perimmäinen syy oli I/O-virhe, joka aiheutti jakajan olevan nolla.
- Tällaisissa tapauksissa ketjutetut poikkeukset auttavat levittämään sekä virheen ensisijaisia että taustalla olevia syitä.
Esimerkki : Seuraava esimerkki osoittaa kuinka ketjutettuja poikkeuksia käytetään Javassa.
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()); } } }
Lähtö
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Huomautus: Ketjutetut poikkeukset, joita kutsutaan myös sisäkkäisiksi poikkeuksiksi, antavat meille mahdollisuuden yhdistää syyn poikkeukseen Javassa. Tämä on hyödyllistä, kun haluamme levittää tietoa poikkeuksen alkuperäisestä syystä.
Rakentajat
- Heitettävä (heitettävä syy) : Missä syy on poikkeus, joka aiheuttaa nykyisen poikkeuksen.
- Heitettävä (merkkijonoviesti Heitettävä syy) : Missä msg on poikkeusviesti ja syy on poikkeus, joka aiheuttaa nykyisen poikkeuksen.
Menetelmät heitettävien tukiketjujen poikkeuksiin
- getCause() : Tämä menetelmä palauttaa poikkeuksen todellisen syyn.
- initCause (heitettävä syy) : Tämä menetelmä määrittää kutsupoikkeuksen syyn.
Esimerkki: Mukautetun viestin käyttäminen ketjutetuilla poikkeuksilla
Javassa voimme ketjuttaa poikkeuksia käyttämällä Throwable-luokan konstruktoria.
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); } } }
Lähtö:
mahdoton tehtävä kaikki elokuvat
Selitys: Tässä esimerkissä kokonaislukujen joukko ja asettaa jakajaksi 0.
- Try-lohkon sisällä se yrittää jakaa taulukon jokaisen elementin 0:lla, mikä antaa aritmeettisen poikkeuksen.
- Tämä aritmeettinen poikkeus jää kiinni lohkoon, jossa luodaan uusi RuntimeException, jonka syynä on alkuperäinen poikkeus eli AritmeticException.
- Koska RuntimeExceptionia ei havaita, mikä näyttää pinon jäljityksen, mukaan lukien RuntimeException ja AritmeticException.
Ketjuttujen poikkeusten edut:
Ketjuttujen poikkeusten edut on lueteltu alla:
- Tämä poikkeus auttaa virheenkorjauksessa antamalla tietoja sekä ensisijaisista että perimmäisistä syistä.
- Se yksinkertaistaa virheiden käsittelyä mahdollistamalla täydellisen poikkeuskontekstin leviämisen.
- Tämä parantaa virheiden jäljitettävyyttä monimutkaisissa sovelluksissa.
Ketjuttujen poikkeusten haitat:
- Jos sitä ei käytetä oikein, se voi tehdä pinojäljestä pidemmän ja vaikeammin luettavan.
- Liiallinen käyttö voi aiheuttaa hämmentäviä virheilmoituksia, jos poikkeuksia ketjutetaan tarpeettomasti.
- Kehittäjien on varmistettava, että merkitykselliset syyt liittyvät toisiinsa. muuten se voi johtaa harhaan virheenkorjauksen aikana.