Comment attraper des exceptions dans Java

Chaque fois que vous utilisez une déclaration qui pourrait lever une exception en Java, vous devez écrire un code spécial pour anticiper et intercepter l'exception. De cette façon, votre programme ne plantera pas si l'exception se produit.

Sommaire

Vous attrapez une exception en utilisant un essayer déclaration, qui a la forme générale:

try { déclarations qui peuvent jeter des exceptions} catch (-type d'exception identifiant) { déclarations exécutées lorsque exception est levée}

Ici, vous placez les déclarations qui pourraient jeter une exception dans un essayer bloc. Ensuite, vous attrapez l'exception avec un capture bloc.

Voici quelques petites choses à noter à propos essayer déclarations:

  • Vous pouvez coder plus d'un capture bloc. De cette façon, si les déclarations de la essayer bloc pourrait jeter plus d'un type d'exception, vous pouvez attraper chaque type d'exception dans un document distinct capture bloc.

  • Aux fins de détermination de la portée, de la essayer bloc est son propre bloc autonome, distincte de la capture bloc. En conséquence, toutes les variables que vous déclarent dans le essayer bloc ne sont pas visibles à l' capture bloc. Si vous voulez qu'ils soient, déclarent immédiatement avant la essayer déclaration.

  • Vous pouvez également coder un bloc spécial (appelé Enfin bloc) après tout, le capture blocs. Pour plus d'informations sur le codage Enfin blocs.




  • Les différentes classes d'exception dans l'API Java sont définies dans des emballages différents. Si vous utilisez une classe d'exception qui ne soit pas défini dans la norme java.lang paquet qui est toujours disponible, vous devez fournir une importation déclaration pour le package qui définit la classe d'exception.

Un exemple simple

Pour illustrer comment fournir une exception, voici un programme qui divise deux nombres et utilise un essayer/capture déclaration à attraper une exception si le deuxième numéro se révèle être nul:

public class DivideByZero {static void main (String [] args) {int publics a = 5 int b = 0- // vous savez que ce ne sera pas worktry {int c = a / b- // mais vous essayez quand même} catch (ArithmeticException e) {System.out.println ("Oups, vous ne pouvez pas" "division par zéro." +) -}}}

Ici, la division se produit dans un essayer bloc, et un capture poignées de bloc ArithmeticException. ArithmethicException est défini par java.lang, si un importation déclaration car il est pas nécessaire.

Lorsque vous exécutez ce programme, le suivant est affiché sur la console:

Oups, vous ne pouvez pas diviser par zéro.

Il n'y a rien d'autre à voir ici.

Un autre exemple

Voici un exemple simple d'un programme qui utilise une méthode pour obtenir un entier valide de l'utilisateur. Si l'utilisateur entre une valeur qui est un nombre entier non valide, le capture bloc attrape l'erreur et force la boucle pour répéter.

. import java.util * - classe publique getInteger {static Scanner sc = new Scanner (System.in) -publics static void main (String [] args) {System.out.print ("Entrez un nombre entier:") -int i = GetAnInteger () - System.out.println ("Vous avez saisi" + i) -} public static int GetAnInteger () {while (true) {try {return sc.nextInt () -} catch (InputMismatchException e) {sc. next () - System.out.print ("Cela ne veut pas" + "un nombre entier Essayez à nouveau.") -}}}}

Voici la déclaration qui obtient l'entrée de l'utilisateur et elle renvoie aux méthodes appelées est codé dans le essayer bloc. Si l'utilisateur entre un entier valide, cette déclaration est le seul dans cette méthode qui est exécuté.

Si l'utilisateur entre des données qui ne peuvent pas être converties en un nombre entier toutefois, la nextInt méthode lève une InputMismatchException. Puis cette exception est interceptée par la capture bloc - qui dispose d'une entrée incorrecte de l'utilisateur en appelant le Suivant Procédé, ainsi que par l'affichage d'un message d'erreur. Puis le tandis que boucle répète.

Voici ce que la console pourrait ressembler pour une exécution typique de ce programme:

Entrez un entier: troisCela ne veut pas un nombre entier. Essayez à nouveau: 3.001That est pas un nombre entier. Essayez à nouveau: 3You entré 3

Voici quelques autres choses à noter à propos de ce programme:

  • La importation précise des états java.util. * d'importer toutes les classes de la java.util package. De cette façon, la InputMismatchException classe est importée.

  • La Suivant méthode doit être appelée dans le capture bloc de disposer de données incorrectes de l'utilisateur parce que le nextInt Procédé laisse la valeur d'entrée dans la ScannerLe flux d'entrée de 'si une InputMismatchException est jeté. Si vous omettez la déclaration qui appelle Suivant, la tandis que boucle maintient le lire, lance une exception, et affiche un message d'erreur dans une boucle infinie.

    Cette erreur a été constaté à la dure. (La seule façon de faire arrêter est de fermer la fenêtre de la console.)

    image0.jpg

» » » » Comment attraper des exceptions dans Java