Meilleure compréhension des Vs vérifiés. Exceptions non contrôlées - Comment mieux gérer les exceptions en Java ?
Publié: 2014-09-15Exception vérifiée
Qu'est-ce que l'exception vérifiée dans le langage de programmation Java. En langage simple : Exception qui est vérifiée au moment de la compilation appelée Exception vérifiée. Certains d'entre eux sont mentionnés ci-dessous. Si dans votre code si une méthode lève une checked exception
, alors la méthode doit soit handle the exception
, soit spécifier l'exception à l'aide du mot-clé throws
.
- IOException
- SQLException
- DataAccessException
- ClassNotFoundExceptionClassNotFoundException
- InvocationTargetExceptionInvocationTargetException
- MalformedURLException
Jetons un coup d'œil à l'exemple :
Dans l'exemple ci-dessous, nous allons obtenir le contenu du site "Crunchify.com" et l'imprimer dans la console. Au cours de cette opération, le programme Java lancera MalformedURLException
ou IOException
sur les lignes en surbrillance ci-dessous.
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 ( ) ; } } |
Il existe deux façons de résoudre ce problème. Add throws clause
OU Add Try, Catch block
à votre code pour le résoudre. Voici un code mis à jour.
- Modifier les lignes 16 et 20 et ajouter
throws IOException
- Ajouter try catch block sur 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 ( ) ; } } |

Exception non cochée
Les exceptions non vérifiées en Java sont les exceptions dont la gestion n'est NOT verified during Compile time
. Ces exceptions se produisent en raison d'une mauvaise programmation.
Le programme ne donnera pas d'erreur de compilation.
Toutes les exceptions non vérifiées sont des sous-classes directes de la classe RuntimeException
.
Simple Example
: Vous avez créé un formulaire en ligne qui accepte les entrées de l'utilisateur. C'est sous forme de texte libre. L'utilisation peut entrer une valeur erronée dans le cas du champ e-mail, ou du champ du nom d'utilisateur OU du champ du numéro de téléphone.
Si vous n'avez pas de validation côté client, il existe plus de possibilités d'obtenir une exception de validation d'exécution lors de l'exécution de l'application en production. Une erreur peut survenir lors d'une opération de base de données ou lors de la conversion d'un champ d'un format à un autre.
Vous trouverez ci-dessous le type d'exceptions non contrôlées :
- NullPointerException
- ArrayIndexOutOfBound
- Exception d'argument illégal
- IllegalStateException
Celui qui m'ennuie le plus est NullPointer Exception. J'ai écrit un article détaillé sur NPE la semaine dernière.
Il y a au total 8 conseils différents fournis pour éviter les 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 ) ; } } } |
Dans Java 7, vous pouvez gérer plusieurs exceptions dans un seul Catch block
. Vous pouvez changer la ligne 13 de la ligne ci-dessus changée en ci-dessous.
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
En résumé, les exceptions cochées et non cochées sont gérées à l'aide des mots-clés try, catch
et finally
.
En termes de fonctionnalité, les exceptions vérifiées et non vérifiées sont les mêmes.