Java aruncă și aruncă cuvânt cheie

În acest tutorial, vom învăța să folosim cuvintele cheie throw și throws pentru tratarea excepțiilor, cu ajutorul exemplelor.

În Java, excepțiile pot fi clasificate în două tipuri:

  • Excepții neverificate: Acestea nu sunt verificate la timpul compilării , dar la run-time.For exemplu: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, excepțiile prevăzute de Errorclasă, etc.
  • Excepții verificate: sunt verificate la compilare. De exemplu, IOException, InterruptedExceptionetc.

Consultați Excepțiile Java pentru a afla detaliat despre excepțiile bifate și nebifate.

De obicei, nu este nevoie să gestionăm excepții necontrolate. Acest lucru se datorează faptului că excepțiile necontrolate apar din cauza erorilor de programare. Și, este o bună practică să le corectați în loc să le manipulați.

Acest tutorial se va concentra acum pe modul de gestionare a excepțiilor verificate folosind throwși throws.

Java aruncă cuvânt cheie

Folosim throwscuvântul cheie în declarația metodei pentru a declara tipul de excepții care ar putea apărea în cadrul acesteia.

Sintaxa sa este:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

După cum puteți vedea din sintaxa de mai sus, putem folosi throwspentru a declara mai multe excepții.

Exemplul 1: Java lansează cuvânt cheie

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Ieșire

 java.io.FileNotFoundException: test.txt (Nu există un astfel de fișier sau director) 

Când rulăm acest program, dacă fișierul test.txtnu există, FileInputStreamaruncă un FileNotFoundExceptioncare extinde IOExceptionclasa.

Dacă o metodă nu gestionează excepții, tipul de excepții care pot apărea în cadrul acesteia trebuie specificat în throwsclauză, astfel încât metodele de mai sus din stiva de apeluri să le poată gestiona sau să le specifice folosind throwscuvântul cheie.

findFile()Metoda specifică faptul că o IOExceptionpot fi aruncate. main()Metoda numește această metodă și se ocupă de excepție în cazul în care este aruncată.

Aruncând multiple excepții

Iată cum putem arunca mai multe excepții folosind throwscuvântul cheie.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Aici, findFile()metoda specifică faptul că aceasta poate arunca NullPointerException, IOExceptionși InvalidClassExceptionîn ei throwsclauza.

Rețineți că nu am gestionat NullPointerException. Acest lucru se datorează faptului că este o excepție necontrolată. Nu este necesar să o specificați în throwsclauză și să o gestionați.

aruncă cuvânt cheie Vs. încearcă … prinde … în cele din urmă

S-ar putea să existe mai multe metode care pot provoca excepții. Scrierea try… catchpentru fiecare metodă va fi plictisitoare, iar codul devine lung și mai puțin lizibil.

throws este util și atunci când ați bifat excepția (o excepție care trebuie tratată) pe care nu doriți să o prindeți în metoda dvs. curentă.

Cuvânt cheie Java throw

Cuvântul throwcheie este folosit pentru a arunca în mod explicit o singură excepție.

Când se aruncă o excepție, fluxul de execuție a programului se transferă din trybloc în catchbloc. Folosim throwcuvântul cheie într-o metodă.

Sintaxa sa este:

 throw throwableObject;

Un obiect aruncabil este o instanță a clasei Throwablesau subclasei Throwableclasei.

Exemplul 2: cuvânt cheie Java throw

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Ieșire

 Excepție în firul „principal” java.lang.ArithmeticException: Încercarea de a împărți la 0 la Main.divideByZero (Main.java:3) la Main.main (Main.java:7) starea de ieșire 1 

În acest exemplu, aruncăm în mod explicit un ArithmeticException.

Notă: ArithmeticException este o excepție nebifată. De obicei nu este necesar să se gestioneze excepțiile necontrolate.

Exemplul 3: Aruncare excepție verificată

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Ieșire

 Fișierul nu a fost găsit 

findFile()Metoda aruncă o IOExceptioncu mesajul am trecut la constructorul acestuia.

Rețineți că, deoarece este o excepție verificată, trebuie să o specificăm în throwsclauză.

Metodele care apelează această findFile()metodă trebuie fie să gestioneze această excepție, fie să o specifice folosind throwscuvintele cheie.

Am tratat această excepție în main()metodă. Fluxul de execuție a programului se transferă din trybloc în catchbloc atunci când se aruncă o excepție. Deci, restul codului din trybloc este omis și instrucțiunile din catchbloc sunt executate.

Articole interesante...