[Java] Types d'exception et traitement de base

Types d'exceptions et correspondance

La ** classe d'exception ** fournie par l'API se trouve dans la hiérarchie d'héritage suivante.

Ici, nous traiterons des exceptions en particulier pour les exceptions de type Exception.

Support de base avec try-catch

La gestion des exceptions peut être décrite dans l'instruction try-catch.

try{
    FileWriter fw = new FileWriter("c:¥¥data.txt");
    fw.write("hellow!");
}catch(IOException e){
    System.exit();
}

Si vous ne gérez pas les exceptions, l'erreur de compilation suivante se produira dans le système d'exceptions.

Exception java.io.IOException n'est pas signalé.
Vous devez attraper ou déclarer un lancer pour lancer.

(Je ne l'ai pas encore lu) Entourez la partie correspondante de try-catch ou Déclarez throw IOException dans la définition de méthode L'appelant doit gérer les exceptions.

Attrapez abstraitement

Si vous écrivez la partie conditionnelle de catch comme ʻException e`, Attrapez des exceptions ou des exceptions RuntimeException. L'intention est d'attraper grossièrement les classes descendantes de la classe Exception.

try{
    FileWriter fw = new FileWriter("c:¥¥data.txt");
    fw.write("hellow!");
}catch(Exception e){
     System.out.println("Un problème est survenu"); //En quelque sorte ...
}

Je ne sais pas si l'expression "attraper abstraitement" est correcte ...

Enfin attaché

Si vous ajoutez enfin après catch, Vous pouvez définir le processus que vous souhaitez exécuter indépendamment de l'occurrence d'une exception. Pour le nettoyage, comme la fermeture de fichiers ouverts et la fermeture de bases de données et de connexions réseau.

try{
    FileWriter fw = new FileWriter("c:¥¥data.txt");
    fw.write("hellow!");
}catch(IOException e){
    System.out.println("Un problème est survenu");
}finally{
    fw.close();
}

Fermer automatiquement ()

Si l'écriture du bloc finally est un problème, écrivez () dans le premier try.

try(
    FileWriter fw = new FileWriter("c:¥¥data.txt");
){
    fw.write("hellow!");
}catch(IOException e){
    System.out.println("Un problème est survenu");
}

Si vous optez pour cela, il semble que le premier data.txt ouvert sera automatiquement closed (). Cependant, il est limité aux types qui implémentent l'interface java.lang.AutoCloseable.

lance la déclaration

Lors de la déclaration avec une méthode, écrivez comme suit.

** ... le nom de la méthode lève la classe d'exception 1, la classe d'exception 2, ... **

Sub.java


public class Sub{
    public static void subsub() throws IOException{
         FileWriter fw = new FileWriter("date.txt");
         fw.write("hello!");
    }
}

Main.java


public class Main{
    public static void main(Strgin[] args){
        try{
            //Il existe différents processus ...
            subsub();
        }catch(IOException e){
            System.exit();
        }
    }
}

Parce qu'il n'est pas traité par la méthode subsub appelée Cela ressemble à un traitement avec la méthode principale de l'appelant.

les lancers sont également utilisés pour lancer des exceptions.

Lancer une exception

Écrivez comme suit. Notez qu'il s'agit d'une forme singulière.

** lancer une instance d'exception; **

Ou

** lancer une instance d'exception ("message d'erreur"); **

Person.java


Public class Person{
    int age;
    public class setAge(int Age){
        if(age <= 0){
        //S'il est égal ou inférieur à 0
            throw new IllgalArgumentExeception("L'âge doit être un nombre positif. Valeur spécifiée=" + age);
        }
        //Si c'est un nombre positif
        this.age = age;
    }
}

Main.java


public class Main{
    public static void main(String[] args){
        Person p = new Person();
        p.setAge(-128); //Essayez maintenant de définir une valeur incorrecte.
    }
}

En conséquence de l'exécution,

Exception in thread "main" java.lang.IllegalArgumentException:L'âge doit être un nombre positif. Valeur spécifiée=-128
  at Person.setAge(Person.java:6)
  at Main.main(Main.java:4)

L'instruction throws lève une instance IllegalArgumentException à la machine virtuelle Java et la signale. L'exception est renvoyée à la méthode main, mais ici, la JVM finit par tuer le programme car elle n'a pas intercepté l'exception.

Définition de la classe d'exception d'origine

Vous pouvez créer votre propre classe d'exceptions en héritant de la classe d'exceptions existante. La méthode de fabrication est la même que la méthode d'héritage générale.

Par exemple, lors du développement d'un programme pour lire des documents ou quelque chose Je souhaite une gestion des exceptions lors de la lecture d'un fichier de document non pris en charge ...

UnsupportedDocumentFileException.java


public class UnsupportedDocumentFileException extends Exception{
    public UnsupportedDocumentFileException(String){
        //Constructeur qui reçoit un message d'erreur
        super(msg);
    }
}

Main.java


public class Main{
    public static void main(String[] args){
        try{
            //Lancer une exception à titre d'essai... 
            throw new UnsupportedDocumentFileException
                ("Ceci est un fichier de document non pris en charge");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

ʻException.printStackTrace () `renvoie les informations suivantes.

--Nom de classe de l'exception levée --Explication de l'exception passée dans le constructeur

Pratique.

Livre de référence

[Introduction à Java 2nd Edition] (https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1-%E6%B8%85%E5%96%AC/dp/484433638X) Pp.562-595

Recommended Posts

[Java] Types d'exception et traitement de base
[Java] Types de base et notes d'instructions
Types de données de base et types de référence (Java)
Types de données de base et types de référence Java
Types de données de base Java
A propos du type de données de base Java et de la mémoire du type de référence
Déclaration, initialisation et types de variables Java
Série Java Primer (variations et types)
[Java] Traitement en boucle et table de quatre-vingt-dix-neuf
Flux de traitement de base de Java Stream
[Note] Coopération entre Java et DB (basique)
[Introduction à Java] À propos des déclarations et des types de variables
Gestion des exceptions Java?
Grammaire de base Java
Grammaire Java de base
[Java] Instance d'exception
Connaissances de base Java 1
Traitement des threads Java
[Java] Structure de base
[Java] [Basic] Glossaire
Traitement des chaînes Java
Grammaire de base Java
Java et JavaScript
XXE et Java
Grammaire de base Java
[Java] Gestion des exceptions
☾ Java / Gestion des exceptions
À propos de la gestion des exceptions Java
[Java] Traitement multi-thread
Gestion des exceptions Java
Exercice Java [basique]
[Java] Traitement de flux
traitement itératif java
[Java] Résumé personnel des classes et méthodes (basique)
À propos des types de données Java (en particulier des types primitifs) et des littéraux
[Traitement × Java] Type de données et programmation orientée objet
Questions sur la gestion des exceptions Java throw et try-catch
Getter et Setter (Java)
[Java] Types de commentaires et comment les rédiger
[Java] Thread et exécutable
Java vrai et faux
[java] Lancer une exception
mémo de connaissances de base java
Traitement des liens et SQLite
[Java] Comparaison des chaînes de caractères et && et ||
[Java] Type de données ①-Type de base
Manipulation de base de la date Java
Revue Java ① (étapes de développement, grammaire de base, variables, types de données)
Conventions de dénomination Java de base
Mémo d'apprentissage Java (basique)
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
J'ai résumé les types et les bases des exceptions Java
timedatectl et Java TimeZone
Traitement des appels du constructeur JAVA
[Java] Branchement et répétition
[Java] Principaux types de données
[Java Silver] (Gestion des exceptions) À propos des instructions try-catch-finally et try-with-resource
Java aléatoire, divers traitements
Comparaison équivalente de la classe wrapper Java et du type primitif