Java >> Tutoriel Java >  >> Java

Exemples sur la remise exceptionnelle en Java

Ici, nous allons analyser certains codes de gestion des exceptions , pour mieux comprendre les concepts.

Essayez de trouver les erreurs dans le code suivant, le cas échéant

Code 1 :

public class prog {
    public static void main(String arg[]) {
        try {
            int a = 10, b = 0;
            int c = a / b;
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println(e.getMessage());
        }
    }

}

Sortie

/prog.java:8: error: exception ArithmeticException has already been caught
        } catch (ArithmeticException e) {
          ^
1 error

Explication :

Lors de l'utilisation de plusieurs blocs catch, nous devons nous assurer que les exceptions sont interceptées dans l'ordre inverse de l'héritage des exceptions. Cela signifie que les exceptions les plus spécifiques doivent être interceptées avant les exceptions les plus générales. Exception Arithmétique doit être intercepté avant l'RuntimeException .

Code 2 :

public class prog {
    public static void main(String arg[]) {
        try {
            throw new Integer(25);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Sortie

/prog.java:4: error: incompatible types: Integer cannot be converted to Throwable
            throw new Integer(25);
            ^
Note: /prog.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error

Explication :

Nous ne pouvons lancer que des objets de la classe Throwable ou des classes qui héritent de cette classe. La classe Integer n'étend pas la classe Throwable et, par conséquent, nous ne pouvons pas lancer d'objets de la classe Integer. De même, l'énoncé "throw 25" est erroné . Contrairement à C++, où nous pouvons lancer des objets, en Java, nous ne pouvons lancer que les objets qui héritent de la classe Throwable.

Code 3 :

public class prog {
    public static void main(String arg[]) {
        err ob1 = new err();
        ob1.func();
    }
}

class err {
    void func() {
        try {
            System.out.println("Inside try");
        } finally {
            System.out.println("Inside finally");
        }
    }
}

Sortie

Inside try
Inside finally

Explication :

Il n'est pas nécessaire d'attacher un bloc catch à un bloc try. L'instruction try peut être directement associée à une instruction finally.

Code 4 :

import java.io.*;

public class prog {
    public static void main(String arg[]) {
        err ob1 = new err();
        ob1.func();
    }
}

class err {
    void func() throws IOException {
        try {
            System.out.println("Inside try");
        } catch (Exception e) {
            System.out.println("Inside catch");
        } finally {
            System.out.println("Inside finally");
        }
    }
}

Sortie

/prog.java:6: error: unreported exception IOException; must be caught or declared to be thrown
        ob1.func();
                ^
1 error

Explication :

Si une fonction est censée lever une exception vérifiée, cette exception vérifiée doit être interceptée par l'appelant. L'instruction 'void func() lance IOException ' indique clairement que la fonction peut lever une IOException qui doit être gérée par l'appelant. L'erreur peut être corrigée en joignant le 'ob1.func() ' dans un bloc try-catch.

Code 5 :

import java.io.*;

public class prog {
    public static void main(String arg[]) {
        err ob1 = new err();
        ob1.func();
    }
}

class err {
    void func() throws RuntimeException {
        try {
            System.out.println("Inside try");
            try {
                int[] a = new int[10];
                int c = 10;
                a[c] = 0;
            }
        } catch (Exception e) {
            System.out.println("Inside catch");
        }

    }
}

Sortie

/prog.java:14: error: 'try' without 'catch', 'finally' or resource declarations
            try {
            ^
1 error

Explication :

Chaque bloc try doit être associé à un bloc catch ou finally. Dans le code, le bloc try interne n'a pas de bloc catch ou finally associé.


Balise Java