O mai bună înțelegere a verificat vs. Excepții nebifate - Cum să gestionați excepțiile mai bine în Java?
Publicat: 2014-09-15
Excepție bifată
Ce este Excepția verificată în limbajul de programare Java. Într-un limbaj simplu: Excepție care este verificată în momentul Compilării numită Excepție Verificată. Unele acestea sunt menționate mai jos. Dacă în codul dvs. dacă unele dintre metode aruncă o checked exception , atunci metoda trebuie fie să handle the exception , fie trebuie să specifice excepția folosind cuvântul cheie throws .
- IOException
- SQLException
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- Excepție URL incorectă
Să aruncăm o privire la exemplu:
În exemplul de mai jos vom obține conținutul site-ului „Crunchify.com” și îl vom imprima în consolă. În timpul acestei operațiuni, programul Java va lansa MalformedURLException sau IOException la liniile evidențiate de mai jos.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } in . close ( ) ; return sb . toString ( ) ; } } |
Există două moduri de a rezolva acest lucru. Add throws clause SAU Add Try, Catch block la codul dvs. pentru a o rezolva. Iată un cod actualizat.
- Modificați liniile 16 și 20 și adaugă
throws IOException - Adăugați blocul try catch pe 26,42,43
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) throws IOException { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) throws IOException { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; try { URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } } catch ( IOException e ) { // TODO: Consume and Throw an error with detailed message. } in . close ( ) ; return sb . toString ( ) ; } } |

Excepție nebifată
Excepția nebifată în Java este acele excepții a căror gestionare NOT verified during Compile time . Aceste excepții apar din cauza programării proaste.
Programul nu va da o eroare de compilare.
Toate excepțiile neverificate sunt subclase directe ale clasei RuntimeException .
Simple Example : ați creat un formular online care acceptă introducerea utilizatorului. Este o formă de text liber. Utilizarea poate introduce orice valoare greșită în cazul câmpului de e-mail sau al câmpului nume de utilizator SAU al câmpului numărul de telefon.
Dacă nu aveți validare la nivelul clientului, atunci există mai multe posibilități de a obține Excepția de validare a runtimei în timp ce rulați aplicația în producție. Eroare poate apărea prin operarea DB sau conversia câmpului dintr-un format în altul.
Mai jos sunt tipurile de excepții nebifate:
- NullPointerException
- ArrayIndexOutOfBound
- IllegalArgumentException
- IllegalStateException
Cel mai mult mă enervează este NullPointer Exception. Am scris un articol detaliat despre NPE săptămâna trecută.
Sunt oferite în total 8 sfaturi diferite pentru a evita NPE.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } } |

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; try { String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } catch ( ArrayIndexOutOfBoundsException e ) { System . out . println ( "ArrayIndexOutOfBoundException appears here. Better handle it in code above :)" + e ) ; } } } |
În Java 7, puteți gestiona mai multe excepții într-un singur Catch block . Puteți schimba linia 13 de la linia de sus schimbată la dedesubt.
|
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
Ca rezumat, Atât excepția bifată, cât și cea neverificată sunt gestionate folosind cuvântul cheie try, catch și finally .
În ceea ce privește funcționalitatea verificată și excepția neverificată sunt aceleași.
