Java finally块

Java finally块是一个用于执行重要代码的块,例如关闭连接等。

Java finally块无论是否处理异常都会被执行。因此,它包含了所有需要被执行的必要语句,无论是否发生异常。

finally块跟在try-catch块之后。

finally块的流程图

图1

为什么使用Java finally块?

  • Java中的finally块可用于放置“清理”代码,例如关闭文件、关闭连接等。
  • 可以将需要被打印的重要语句放置在finally块中。

Java finally的用法

让我们看看可以使用Java finally块的不同情况。

情况1:没有发生异常

看下面的例子,Java程序没有抛出任何异常,在try块之后执行了finally块。

TestFinallyBlock.java

class TestFinallyBlock {    
  public static void main(String args[]){    
  try{    
//下面的代码不抛出任何异常   
   int data=25/5;    
   System.out.println(data);    
  }    
//catch不会被执行    
  catch(NullPointerException e){  
System.out.println(e);  
}    
//不管异常发生与否都执行    
 finally {  
System.out.println("finally block is always executed");  
}    
    
System.out.println("rest of phe code...");    
  }    
}    

输出:

图2

情况2:发生异常但未被catch块处理

让我们看下面的例子。这里的代码抛出一个异常,但是catch块无法处理它。尽管如此,try块之后仍然执行了finally块,然后程序异常终止。

TestFinallyBlock1.java

public class TestFinallyBlock1{    
      public static void main(String args[]){   
  
      try {    
  
        System.out.println("Inside the try block");  
          
        //下面的代码抛出被零除异常  
       int data=25/0;    
       System.out.println(data);    
      }    
      //无法处理算术类型异常    
      //只能接受空指针类型的异常    
      catch(NullPointerException e){  
        System.out.println(e);  
      }   
  
      //不管异常发生与否都执行 
      finally {  
        System.out.println("finally block is always executed");  
      }    
  
      System.out.println("rest of the code...");    
      }    
    }    

输出:

图3

情况3:发生异常并且被catch块处理

示例:

让我们看下面的例子,Java代码抛出一个异常,catch块处理了该异常。然后,在try-catch块之后执行finally块。接着,其余的代码也正常执行。

TestFinallyBlock2.java

public class TestFinallyBlock2{    
      public static void main(String args[]){   
  
      try {    
  
        System.out.println("Inside try block");  
  
        //下面的代码抛出被零除异常  
       int data=25/0;    
       System.out.println(data);    
      }   
  
      //处理算术异常/除以零异常  
      catch(ArithmeticException e){  
        System.out.println("Exception handled");  
        System.out.println(e);  
      }   
  
      //不管异常发生与否都执行
      finally {  
        System.out.println("finally block is always executed");  
      }    
  
      System.out.println("rest of the code...");    
      }    
    }  

输出:

图4

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想