Java >> Java tutorial >  >> Tag >> final

Når endelig blok ikke udføres ELLER endelig blok bliver altid udført i Java

"Endelig" vil blive kaldt efter udførelsen af ​​prøve- eller fangkodeblokkene. Nogle programmører tænker finally blok udføres altid, uanset hvad. Men det er ikke sandt.

Bemærk: finally vil blive kaldt efter udførelse af try eller catch kodeblokke.

Nogle tilstande (tilfælde), hvor "endelig" ikke bliver kaldt, er:

  1. System.exit() påberåbes i blok
  2. Runtime.getRuntime().halt(exitStatus)
  3. Hvis JVM'en går ned først
  4. Hvis JVM når en uendelig løkke (eller en anden ikke-afbrydelig, ikke-afsluttende sætning) i try or catches-blokken
  5. Hvis OS tvangsmæssigt afslutter JVM-processen; f.eks. dræb -9 på UNIX.
  6. Hvis blokken endelig skal udføres af en dæmontråd, og alle andre ikke-dæmontråde afsluttes før finally hedder

Normal try-catch-blokkode

I eksemplet udføres "endelig"-blokken altid, hvis undtagelsen er sket eller ej.

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");
      }
   }

Output:

3
endelig udføres blokering altid

Lad os prøve, når blokeringen endelig ikke udføres i java

1. System.exit(int)

"endelig blokering" vil ikke køre på grund af System.exit(1)-betingelsen i try-blokken. System.exit(0) vender ikke tilbage, og "endelig blokering" udføres ikke.

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");
        }
    }
    
}

Output: 3

2. Runtime.getRuntime().halt(exitStatus)

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");
        }
    }
    
}

Output: Hej prøv

Så konklusionen er, at endelig vil blokering ikke altid blive udført i Java.

Det kunne være dit interviewspørgsmål. Skriv en kommentar, hvis du har nogen tvivl og forslag til denne tutorial.

Bemærk: Dette eksempel (Projekt) er udviklet i IntelliJ IDEA 2018.2.6 (Community Edition)
JRE:11.0.1
JVM:OpenJDK 64-Bit Server VM af JetBrains s.r.o
macOS 10.14.1
Java version 11
Alle Java endelig blokering udføres ikke koder er i Java 11, så det kan ændre sig på anderledes end Java 9 eller 10 eller opgraderede versioner.


Java tag