În Java, gestionarea excepțiilor este unul dintre mijloacele eficiente de a gestiona erorile de rulare, astfel încât fluxul obișnuit al aplicației să poată fi păstrat. Se ocupă de erorile de rulare, cum ar fi NullPointerException ArrayIndexOutOfBoundsException etc. Pentru a gestiona eficient aceste erori, Java oferă două cuvinte cheie throw și throws.
Aruncarea Java
Cuvântul cheie throw în Java este folosit pentru a arunca în mod explicit o excepție de la o metodă sau orice bloc de cod. Putem arunca fie o excepție bifată, fie nebifată. Cuvântul cheie throw este folosit în principal pentru a arunca excepții personalizate.
Sintaxă:
arunca Exemplu
Unde instanță este un obiect de tip Throwable (sau subclasele sale, cum ar fi Exception).
Exemplu:
aruncă o nouă excepție ArithmeticException('/ by zero');
Dar această excepție, adică instanța trebuie să fie de tip Aruncabil sau o subclasă de Aruncabil .
Fluxul de execuție al programului se oprește imediat după executarea instrucțiunii throw și cea mai apropiată încadrare. încerca blocul este verificat pentru a vedea dacă are un captură declarație care se potrivește cu tipul de excepție. Dacă găsește o potrivire controlată, este transferată la acea declarație, în caz contrar, următoarea anexare încerca blocul este verificat și așa mai departe. Dacă nu se potrivește captură este găsit, atunci handlerul implicit de excepții va opri programul.
bou vs taur
Exemplu: Acest exemplu demonstrează unde este aruncată o excepție prinsă și aruncată din nou în interiorul unei metode.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
Ieșire
Caught inside fun(). Caught in main.
Explicaţie: Exemplul de mai sus demonstrează utilizarea cuvântului cheie throw pentru a arunca în mod explicit o excepție NullPointerException. Excepția este prinsă în interiorul distracţie() metoda și aruncat din nou acolo unde este apoi prins în metoda main().
Exemplu: Acest exemplu demonstrează o excepție aritmetică.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
Ieșire:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Explicaţie: Exemplul de mai sus demonstrează o excepție folosind throw unde o ArithmeticException este aruncată în mod explicit din cauza împărțirii la zero.
Java aruncă
aruncări este un cuvânt cheie în Java care este utilizat în semnătura unei metode pentru a indica faptul că această metodă ar putea arunca una dintre excepțiile de tip enumerate. Apelantul la aceste metode trebuie să gestioneze excepția folosind un bloc try-catch.
Sintaxă:
tip nume_metodă(parametri) aruncă lista_excepții
unde exception_list este o listă separată prin virgulă a tuturor excepțiilor pe care o metodă le-ar putea arunca.
Într-un program, dacă există șansa de a ridica o excepție, compilatorul ne avertizează întotdeauna despre aceasta și trebuie să ne ocupăm de acea excepție verificată. În caz contrar, vom primi o eroare de timp de compilare care spune că excepția neraportată XXX trebuie capturată sau declarată a fi aruncată. Pentru a preveni această eroare de timp de compilare, putem gestiona excepția în două moduri:
- Folosind try catch
- Prin folosirea aruncări cuvânt cheie
Putem folosi cuvântul cheie throws pentru a delega responsabilitatea gestionării excepțiilor apelantului (poate fi o metodă sau JVM), apoi metoda apelantului este responsabilă să gestioneze acea excepție.
Exemplul 1: Excepție netratată
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Ieșire:
error: unreported exception InterruptedException; must be caught or declared to be thrownExplicaţie: În programul de mai sus primim o eroare de timp de compilare, deoarece există o șansă de excepție dacă firul principal se va opri, alte fire au șansa de a executa metoda main() care va provoca InterruptedException.
Exemplul 2: Utilizarea throws pentru a gestiona excepția
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Ieșire:
Hello GeeksExplicaţie: În programul de mai sus, folosind cuvântul cheie throws, am gestionat InterruptedException și vom obține rezultatul ca Salutare Geeks.
Exemplul 3: Lansarea unei excepții cuthrows
linux careJava
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
Ieșire
Inside fun(). Caught in main.
Explicaţie: Exemplul de mai sus aruncă o excepție IllegalAccessException dintr-o metodă și o gestionează în metoda principală folosind un bloc try-catch.
Diferența dintre aruncare și aruncare
Principalele diferențe dintre aruncări și aruncări în Java sunt următoarele:
arunca | aruncări salut lumea cu java |
|---|---|
Este folosit pentru a arunca în mod explicit o excepție. | Este folosit pentru a declara că o metodă poate arunca una sau mai multe excepții. |
Este folosit în interiorul unei metode sau unui bloc de cod. | Este folosit în semnătura metodei. |
Poate arunca atât excepții bifate, cât și nebifate. | Este folosit doar pentru excepțiile verificate. Excepțiile nebifate nu necesită aruncări |
Metoda sau blocul aruncă excepția. | Apelantul metodei este responsabil pentru gestionarea excepției. |
Oprește imediat fluxul curent de execuție. | Forțează apelantul să gestioneze excepțiile declarate. |
aruncă o nouă excepție ArithmeticException('Eroare'); | public void myMethod() aruncă IOException {} |