1. Qu'est-ce qu'une exception?
Tout d'abord, jetons un coup d'œil à l'exemple de la figure ci-dessous:
Dans cet exemple, le code d'erreur existe en divisant par 0. Exception due à la division par 0: Arithmeticexception
Helloexception.java
package com.yiibai.tutorial.Exception; classe publique HelloException {public static void main (String [] args) {System.out.println ("trois"); // Cette division aucun problème. INT VALEUR = 10/2; System.out.println ("deux"); // Cette division aucun problème. valeur = 10/1; System.out.println ("un"); // Cette division a un problème, divisé par 0. // Une erreur s'est produite ici. valeur = 10/0; // et le code suivant ne sera pas exécuté. System.out.println ("Allons-y!"); }}L'exécution de cet exemple en résultera:
Vous pouvez voir des notifications sur l'écran de la console. Les notifications d'erreur sont très claires, y compris les informations sur les lignes de code.
Jetons un coup d'œil au programme suivant à travers le processus dans la figure ci-dessous:
Nous modifierons le code du mode de réalisation susmentionné.
HellocatchException.java
package com.yiibai.tutorial.exception; public class hellocatchException {public static void main (string [] args) {System.out.println ("trois"); // Cette division aucun problème. INT VALEUR = 10/2; System.out.println ("deux"); // Cette division aucun problème. valeur = 10/1; System.out.println ("un"); Essayez {// cette division a un problème, divisé par 0. // Une erreur s'est produite ici. valeur = 10/0; // et le code suivant ne sera pas exécuté. System.out.println ("Value =" + Value); } catch (arithmeticexception e) {// Le code du bloc Catch sera exécuté System.out.println ("Erreur:" + e.getMessage ()); // Le code du bloc Catch sera exécuté System.out.println ("ignorer ..."); } // Ce code est exécuté System.out.println ("Let's Go!"); }}Exécution de l'échantillon de résultats:
Trois
Deux
Un
Erreur: / par zéro
Ignorer...
Allons-y!
Nous expliquerons la procédure suivante comme suit le flux de l'exemple d'image.
2. Hiérarchie d'exception <br /> Il s'agit d'un modèle du graphique hiérarchique des exceptions Java.
La classe la plus élevée est: jetable
Les deux sous-classes directes sont l'erreur et l'exception.
Il y a une sous-classe RuntimeException dans le transfert d'exception, y compris les exceptions de temps de compilation non vérifiées dans Java. Vérifiez et annulez le chèque au moment de la compilation, comme décrit dans la section suivante de l'exemple d'implémentation.
Remarque: Votre classe doit hériter de deux branches: erreur ou exception, pas directement de Throwable.
La machine virtuelle soulève cette erreur lorsqu'un lien dynamique échoue, ou lorsqu'une autre défaillance "dure" de la machine virtuelle se produit. Les programmes Java typiques n'attrapent pas d'erreurs, donc les programmes Java ne lancent aucune erreur. La plupart des programmes lancent et capturent des objets dérivés de la classe d'exception. Une exception indique un problème, mais ces problèmes ne sont pas de graves problèmes systémiques. La plupart des programmes que vous écrivez lanceront et capteront des exceptions.
La classe d'exception définit de nombreuses sous-classes dans le package Java. Ces sous-classes indiquent que différents types d'exceptions peuvent se produire. Par exemple, NegativeArraySizeException indique que le programme essaie de créer un tableau de taille négative.
Une signification particulière de la sous-classe d'un réalisateur dans la langue Java: la classe RuntimeException représente une exception qui se produit (pendant l'exécution) dans une machine virtuelle Java. Un exemple d'exception d'exécution est l'exception NullyiiBaieRexception, qui est soulevée lorsqu'une méthode essaie d'accéder à un membre d'un objet par une référence nul. NullyiiBaieReException peut apparaître partout où un programme tente de déréférence un objet. Les avantages de la vérification des prises d'exception l'emportent souvent sur ses coûts.
Étant donné que les exceptions d'exécution sont omniprésentes, il est vain d'essayer d'attraper ou de spécifier tout le temps (code illisible et imprévable), le compilateur permet aux exceptions d'exécution de ne pas être approuvées et spécifier.
Le package Java définit plusieurs classes RuntimeException. Vous pouvez prendre ces exceptions, tout comme les autres. Mais il n'est pas nécessaire d'un moyen de spécifier qu'il lance une exception d'exécution. De plus, vous pouvez créer votre propre sous-classe RuntimeException. Exceptions d'exécution - La discussion ci-dessous contient une discussion approfondie de quand et comment utiliser les exceptions d'exécution. 3. Utilisez un coup d'essai pour gérer les exceptions
Écrivez des classes héritées de l'exception.
AgeException.java
package com.yiibai.tutorial.Exception.basic; public class AgeException étend une exception {public AgeException (Message de chaîne) {super (message); }} Tooyoungexception.javapackage com.yiibai.tutorial.exception.basic; classe publique Tooyoungexception étend AgeException {public tooyoungexception (message de chaîne) {super (message); }} ToooldException.java
package com.yiibai.tutorial.exception.basic; public class toooldException étend AgeException {public ToooldException (message de chaîne) {super (message); }} Et la méthode statique de vérification de l'âge pour la classe Ageutils.
Ageutils.java
Package com.yiibai.tutorial.exception.basic; classe publique Ageutils {// Cette méthode vérifie l'âge. / Si l'âge est inférieur à 18 ans, la méthode lancera une exception tooyoungexception // Si l'âge de plus de 40 ans, la méthode lancera une exception ToooldException à un vérification du vide statique (int) lève Tooyoungexception, ToooldException {if (Âge <18) {// Si l'âge est de moins de 18 ans, une exception sera lancée // cette méthode se termine ici. jeter un nouveau tooyoungexception ("âge" + âge + "trop jeune"); } else if (Âge> 40) {// Si l'âge de plus de 40 ans, une exception sera lancée. // Cette méthode se termine ici. Jetez un nouveau ToooldException ("Age" + Age + "Too Old"); } // Si l'âge se situe entre 18 et 40 ans. // Ce code sera exécuté. System.out.println ("Age" + Age + "OK!"); }} Vérifiez les exceptions et les exceptions non contrôlées:
AgeException est une exception, la sous-classe de ToooldException et Tooyoungexception2 sont des sous-classes directes de l'âge, ils sont donc "Exception vérifiée"
La méthode AgeUtils.Checkage (int) a lancé une exception et doit répertorier leurs déclarations de méthode via le mot-clé "lance". Ou vous pouvez déclarer lancer plus de niveaux.
L'emplacement Ageutils.Checkage (INT) doit également être traité pour attraper l'exception ou continuer à le lancer.
"Exception vérifiée" est vérifiée par "compilateur Java".
Il y a deux options:
TryCatchdemo1.java
package com.yiibai.tutorial.exception.basic; classe publique tryCatchDemo1 {public static void main (String [] args) {System.out.println ("Démarrer le recrutement ..."); // Vérifiez l'âge System.out.println ("Vérifiez votre âge"); Âge int = 50; essayez {ageUtils.Checkage (âge); System.out.println ("You Pass!"); } catch (tooyoungexception e) {// faire quelque chose ici .. System.out.println ("Vous êtes trop jeune, pas passer!"); System.out.println (e.getMessage ()); } catch (ToooldException e) {// faire quelque chose ici .. System.out.println ("Vous êtes trop vieux, pas passer!"); System.out.println (e.getMessage ()); }}} Dans l'exemple suivant, nous prendrons l'exception (classe Hyperexception) via la classe parent.
TryCatchdemo2.java
package com.yiibai.tutorial.exception.basic; classe publique tryCatchDemo2 {public static void main (String [] args) {System.out.println ("Démarrer le recrutement ..."); // Vérifiez l'âge System.out.println ("Vérifiez votre âge"); Âge int = 15; Essayez {// ici peut lancer ToooldException ou Tooyoungexception AgeUtils.Checkage (âge); System.out.println ("You Pass!"); } Catch (AgeException E) {// Si une exception se produit, Type of AgeException // Ce bloc de capture sera exécuté System.out.println ("Votre âge invalide, vous ne passe pas"); System.out.println (e.getMessage ()); }}} Différentes exceptions peuvent également être regroupées en blocs à gérer s'ils sont traités de la même manière au programme logique.
TryCatchdemo3.java
package com.yiibai.tutorial.exception.basic; classe publique tryCatchDemo3 {public static void main (String [] args) {System.out.println ("Démarrer le recrutement ..."); // Vérifiez l'âge System.out.println ("Vérifiez votre âge"); Âge int = 15; Essayez {// ici peut lancer ToooldException ou Tooyoungexception AgeUtils.Checkage (âge); System.out.println ("You Pass!"); } catch (tooyoungexception | ToooldException e) {// capture des exceptions multiples dans un bloc. System.out.println ("Votre âge invalide, vous ne passe pas"); System.out.println (e.getMessage ()); }}} 4. Try-capch-finally
Nous avons l'habitude d'attraper des erreurs via des blocs de capture d'essai. TRY-Catch-final pour gérer complètement les exceptions.
essayez {// faire quelque chose ici} catch (exception1 e) {// faire quelque chose ici} catch (exception2 e) {// faire quelque chose ici} enfin {// Block enfin est toujours exécuté // faire quelque chose ici} TryCatchfinallydemo.java
package com.yiibai.tutorial.exception.basic; classe publique tryCatchfinallyDemo {public static void main (String [] args) {String text = "001234a2"; int value = toInteger (texte); System.out.println ("Value =" + Value); } public static int toInteger (Text de chaîne) {try {System.out.println ("Begin Parse Text:" + Text); // Une exception peut lancer ici (NumberFormatexception). int Value = Integer.ParseInt (texte); valeur de retour; } catch (NumberFormatexception e) {// Dans le cas du «texte» n'est pas un nombre. // Ce bloc de capture sera exécuté. System.out.println ("Exception du format de numéro" + e.getMessage ()); // Renvoie 0 si NumberFormatexception se produit Retour 0; } enfin {System.out.println ("End Parse Text:" + Text); }}}C'est le processus du programme. Le bloc enfin sera toujours exécuté en toutes circonstances.
5. Exception environnante
Personne.java
Package com.yiibai.tutorial.exception.wrap; Personne de classe publique {public statique final String male = "mâle"; public statique final String femelle = "femme"; nom de chaîne privé; Gender de chaîne privée; Âge privé; Personne publique (nom de chaîne, Gender String, int Age) {this.name = name; this.gender = genre; this.age = âge; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getgender () {return Gender; } public void setGender (String Sexe) {this.gender = genre; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; }} Senterexception.java
package com.yiibai.tutorial.exception.wrap; // Gender exception.public class GendeReXception étend une exception {public genaDerexception (String Message) {super (message); }} Le package de classe ValidateException a d'autres exceptions.
ValidateException.java
package com.yiibai.tutorial.exception.wrap; classe publique ValidateException étend une exception {// envelopper une exception publique validateException (exception e) {super (e); }} Validerutils.java
Le package com.yiibai.tutorial.exception.wrap; import com.yiibai.tutorial.exception.basic.ageutils; classe publique validateUtils {public static void checkPerson (personne personne) lève ValidateException {try {// regorge. // valide si entre 18-40 // cette méthode peut lancer ToooldException, tooyoungexception. AgeUtils.Checkage (Person.getage ()); } catch (exception e) {// Si non valide // enveloppez cette exception par validateException, et lancez New ValidateException (e); } // Si cette personne est une femme, c'est-à-dire invalide. if (personne.getgender (). égal (personne lancer une nouvelle conception de validate (e); }}} Wrapperexceptiondemo.java
package com.yiibai.tutorial.exception.wrap; classe publique wrapperexceptiondemo {public static void main (String [] args) {// un recrutement de participants. Personne personne = nouvelle personne ("marier", personne.Female, 20); essayez {// des exceptions peuvent se produire ici. Validerutils.Checkperson (personne); } catch (validateException wrap) {// Obtenez la vraie cause. // peut être Tooyoungexception, ToooldException, GendeRexception Exception Cause = (exception) wrap.getCause (); if (cause! = null) {System.out.println ("pas passer, cause:" + cause.getMessage ()); } else {System.out.println (wrap.getMessage ()); }}}}6. RuntimeException et sous-classe la classe RuntimeException et ses sous-classes sont toutes deux des "exceptions incontrôlées". Il n'est pas vérifié au temps de compilation par le compilateur Java. Dans certains cas, vous pouvez hériter de cette branche pour écrire vos propres exceptions.
Voici quelques classes appartenant à la branche RuntimeException (bien sûr, ce n'est pas tout).
Quelques exemples de gestion des exceptions de ce type:
6.1- Nullyibaierexception
Il s'agit de l'exception la plus courante et provoque généralement des erreurs dans le programme. L'exception est lancée lorsque vous appelez une méthode ou accédez au champ d'un objet vide.
Nulyiibaierexceptiondemo.java
package com.yiibai.tutorial.exception.runtime; classe publique nullyibaierexceptiondemo {// Par exemple, voici une méthode qui peut renvoyer la chaîne nul. String statique publique getString () {if (1 == 2) {return "1 == 2 !!"; } return null; } public static void main (string [] args) {// c'est un objet qui ne fait pas référence. String text1 = "Hello Exception"; // Appel La méthode récupère la longueur de la chaîne. int length = text1.length (); System.out.println ("longueur text1 =" + longueur); // C'est un objet qui fait référence à Null. String text2 = getString (); // Appel La méthode récupère la longueur de la chaîne. // NullyiiBaiereaxception se produira ici. // Il s'agit d'une exception se produit au moment de l'exécution (type de RuntimeException) // Le compilateur Javac ne vous oblige pas à utiliser un bloc d'essai pour le gérer la longueur = text2.length (); System.out.println ("Finition!"); }}Résultats de l'exécution de l'exemple:
En réalité, Try-Catch peut être utilisé pour attraper et gérer cette exception comme lors de la gestion d'autres exceptions. Cependant, ceci est mécanique et nous devons généralement vérifier que l'objet n'est pas nul avant de l'utiliser.
Vous pouvez corriger le code ci-dessus pour le rendre similaire à ce qui suit pour éviter les exceptions du pointeur nul:
// Ceci est un objet null.String text2 = getString (); // vérifiez que 'text2' ne sont pas nuls.// au lieu d'utiliser Try-Catch.if (text2! = Null) {longueur = text2.Length ();} 6.2- ArrayIndexOfBoundException
Cette exception se produit lorsque vous essayez d'accéder à un élément de tableau avec un index non valide. Par exemple, un tableau a 10 éléments à accéder, mais vous accédez aux éléments avec l'index 20.
ArrayIndexOfBoundSexceptionDemo.java
package com.yiibai.tutorial.exception.runtime; public class arrayIndexofBoundSExceptionDemo {public static void main (String [] args) {string [] strS = new String [] {"one", "deux", "trois"}; // L'accès à l'élément a l'index 0. String str1 = strs [0]; System.out.println ("String à 0 =" + str1); // L'accès à l'élément a l'index 5. // ArrayIndexOfBoundSexception se produit ici. String str2 = strs [5]; System.out.println ("String à 5 =" + str2); }} Pour éviter ArrayIndexofBoundSexception, nous devrions être davantage à vérifier le tableau que d'utiliser un coup de gâteau.
if (str.length> 5) {String str2 = strs [5]; System.out.println ("String à 5 =" + str2);} else {System.out.println ("pas d'éléments avec index 5");}Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.