logo

Excepcions marcades i no marcades a Java

A Java, excepció és un esdeveniment no desitjat o inesperat, que es produeix durant l'execució d'un programa, és a dir, en temps d'execució, que interromp el flux normal de les instruccions del programa.

A Java, hi ha dos tipus d'excepcions:

  1. Excepcions marcades
  2. Excepcions no marcades

Java verificat vs excepcions no marcades



Excepcions marcades a Java

Aquests són les excepcions que es comproven en temps de compilació. Si algun codi dins d'un mètode llança una excepció marcada, llavors el mètode ha de gestionar l'excepció o ha d'especificar l'excepció mitjançant el llançaments paraula clau . A les excepcions verificades, n'hi ha de dos tipus: excepcions totalment verificades i excepcions parcialment verificades. Una excepció totalment verificada és una excepció marcada on totes les seves classes secundàries també es comproven, com ara IOException i InterruptedException. Una excepció parcialment verificada és una excepció marcada on algunes de les seves classes secundàries no estan marcades, com una excepció.

Per exemple, considereu el següent programa Java que obre el fitxer a la ubicació C: esta.txt i en imprimeix les tres primeres línies. El programa no es compila, perquè la funció main() utilitza FileReader() i FileReader() llança una excepció marcada FileNotFoundException . També utilitza els mètodes readLine() i close(), i aquests mètodes també generen excepcions marcades IOException

Exemple:

Java




// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException occurred> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Reading file from path in local directory> >FileReader file =>new> FileReader(>'C: esta.txt'>);> >// Creating object as one of ways of taking input> >BufferedReader fileInput =>new> BufferedReader(file);> >// Printing first 3 lines of file 'C: esta.txt'> >for> (>int> counter =>0>; counter <>3>; counter++)> >System.out.println(fileInput.readLine());> >// Closing file connections> >// using close() method> >fileInput.close();> >}> }>

>

>

Sortida:

Sortida de l'excepció Java Checked

Per solucionar el programa anterior, o bé hem d'especificar una llista d'excepcions mitjançant throws, o bé hem d'utilitzar un bloc try-catch. Hem utilitzat llançaments al programa següent. Des de FileNotFoundException és una subclasse de IOException , només podem especificar IOException a la llista de llançaments i feu que el compilador del programa anterior estigui lliure d'errors.

Exemple:

Java

aprenentatge automàtic i tipus




// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException does not occur> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >throws> IOException> >{> >// Creating a file and reading from local repository> >FileReader file =>new> FileReader(>'C: esta.txt'>);> >// Reading content inside a file> >BufferedReader fileInput =>new> BufferedReader(file);> >// Printing first 3 lines of file 'C: esta.txt'> >for> (>int> counter =>0>; counter <>3>; counter++)> >System.out.println(fileInput.readLine());> >// Closing all file connections> >// using close() method> >// Good practice to avoid any memory leakage> >fileInput.close();> >}> }>

>

>

Sortida:

First three lines of file 'C:	esta.txt'>

Excepcions no marcades a Java

Aquestes són les excepcions que no es comproven en temps de compilació. En C++, totes les excepcions estan desmarcades, de manera que el compilador no l'obliga a gestionar o especificar l'excepció. Correspon als programadors ser civilitzats i especificar o captar les excepcions. A Java, excepcions sota Error i RuntimeException les classes són excepcions no marcades, tot el que es pot llançar està comprovat.

Considereu el següent programa Java. Compila bé, però tira Excepció aritmètica quan corre. El compilador li permet compilar perquè Excepció aritmètica és una excepció no marcada.

Exemple:

Java

disseny singleton




// Java Program to Illustrate Un-checked Exceptions> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Here we are dividing by 0> >// which will not be caught at compile time> >// as there is no mistake but caught at runtime> >// because it is mathematically incorrect> >int> x =>0>;> >int> y =>10>;> >int> z = y / x;> >}> }>

>

>

Sortida

Exception in thread 'main' java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) Java Result: 1>

En resum, les excepcions no marcades són excepcions en temps d'execució que no s'han de capturar o declarar en una clàusula throws. Aquestes excepcions solen ser causades per errors de programació, com ara intentar accedir a un índex fora dels límits d'una matriu o intentar dividir per zero.

Les excepcions no marcades inclouen totes les subclasses de la classe RuntimeException, així com la classe Error i les seves subclasses.

Aquests són alguns exemples d'excepcions no marcades a Java:

1. ArrayIndexOutOfBoundsException: Aquesta excepció es llança quan intenteu accedir a un índex de matriu que està fora dels límits.
2. NullPointerException: Aquesta excepció es genera quan intenteu accedir a una referència d'objecte nul.
3. ArithmeticException: Aquesta excepció es genera quan intenteu dividir per zero o realitzar una operació aritmètica no vàlida.