Java >> Tutoriel Java >  >> Tag >> final

Lorsque le bloc final n'est pas exécuté OU le bloc final est toujours exécuté en Java

Le "finalement" sera appelé après l'exécution des blocs de code try ou catch. Certains programmeurs pensent finally block s'exécute toujours, quoi qu'il arrive. Mais ce n'est pas vrai.

Remarque : finally sera appelé après l'exécution du try ou catch blocs de code.

Certaines conditions (cas) où "enfin" ne sera pas appelé sont :

  1. System.exit() invoqué dans le bloc
  2. Runtime.getRuntime().halt(exitStatus)
  3. Si la JVM plante en premier
  4. Si la JVM atteint une boucle infinie (ou une autre instruction non interruptible et non terminale) dans le bloc try ou catchs
  5. Si le système d'exploitation met fin de force au processus JVM ; par exemple, kill -9 sous UNIX.
  6. Si finalement le bloc va être exécuté par un thread démon et que tous les autres threads non démons se terminent avant finally s'appelle

Code de blocage try-catch normal

Dans l'exemple, le bloc "finally" est toujours exécuté si l'exception s'est produite ou non.

public static void main(String args[]){
      try {
         int a=10,b=30;
         int c = b/a;
         System.out.println(c);
      } catch(ArithmeticException ae){
         System.out.println(ae);
      } finally {
         System.out.println("finally block is always executed");
      }
   }

Sortie :

3
Le bloc finally est toujours exécuté

Essayons quand le bloc finally n'est pas exécuté en Java

1. System.exit(entier)

Le "bloquer enfin" ne s'exécutera pas en raison de la condition System.exit(1) dans le bloc try. System.exit(0) ne revient pas, et le « bloc finally » n'est pas exécuté.

public class Hello {

    public static void main(String args[]){
        try {
            int a=10,b=30;
            int c = b/a;
            System.out.println(c);
            System.exit(0);
        } catch(ArithmeticException ae){
            System.out.println(ae);
        } finally {
            System.out.println("finally block is always executed");
        }
    }
    
}

Sortie : 3

2. Runtime.getRuntime().halt(état de sortie)

public class Hello {

    public static void main(String args[]){
        try {

            System.out.println("Hello try");
            Runtime.getRuntime().halt(1);
        } catch(Exception ae){
            System.out.println(ae);
        } finally {
            System.out.println("finally block is always executed");
        }
    }
    
}

Sortie : Bonjour essayez

La conclusion est donc que le bloc finally ne sera pas toujours exécuté en Java.

Cela pourrait être votre question d'entretien, n'hésitez pas à commenter si vous avez des doutes et des suggestions sur ce tutoriel.

Remarque : Cet exemple (Project) est développé dans IntelliJ IDEA 2018.2.6 (Community Edition)
JRE :11.0.1
JVM :VM serveur OpenJDK 64 bits par JetBrains s.r.o
mac OS 10.14.1
Java version 11
Tous les codes bloc Java finalement ne sont pas exécutés sont en Java 11, il peut donc changer selon Java 9 ou 10 ou les versions mises à niveau.


Balise Java