Java finally关键字
2021-07-15 07:05
                        
 标签:因此   abc   NPU   异常   系统   就是   null   static   内容    关于finally语句块,有如下特点: 1.finally语句块可以直接和try语句块联用。try...finally... 2.try...catch...finally也可以 3.通常在finally语句块中的代码是一定会执行的。 看以下例子: 编译运行后输出: 通常来说return一执行,方法结束,也就是说return之后的代码不会再执行。但是由于后面跟的是finally语句块,上面讲过finally语句块一定会执行,因此System.out.println("Test");也会执行。 再看看以下例子: 编译运行后输出:import java.io.*;
public class ExceptionTest08{
 public static void main(String[] args){
   try{
     System.out.println("ABC");
     return;
   }finally{
     System.out.println("Test");
   }
 }
}ABC
Testimport java.io.*;
public class ExceptionTest08{
 public static void main(String[] args)throws FileNotFoundException{
   try{
     FileInputStream fis=new FileInputStream("c:/ab.txt");  //出现异常
     //由于上面代码出现异常,因此System.out.println("BASIC")不会执行。
     System.out.println("BASIC");
   }finally{
     //在finally语句块中的代码一定会执行。
     System.out.println("AAA");
   }
 }
}AAA
Exception in thread "main" java.io.FileNotFoundException: c:\ab.txt (系统找不到指定的文件。)
        at java.io.FileInputStream.open0(Native Method)
       at java.io.FileInputStream.open(Unknown Source)
       at java.io.FileInputStream.init>(Unknown Source)
       at java.io.FileInputStream.init>(Unknown Source)
       at ExceptionTest08.main(ExceptionTest08.java:36)
只有一种情况finally语句块是不会执行的。
import java.io.*;
public class ExceptionTest08{
 public static void main(String[] args){
   try{
     //退出Java虚拟机
     System.exit(0);
   }finally{
     System.out.println("AAA");
   }
 }
}以上代码在try语句块中退出Java虚拟机,导致finally语句块中的内容不再执行。也就是说,只要在执行finally语句块之前退出了JVM,则finally语句块中的内容不再执行。
咱们再深入了解一下finally语句块。看以下例子:(在编译运行之前大家可以先分析一下输出的结果是什么)
public class ExceptionTest09{
 public static void main(String[] args){
   int i=m1();
   System.out.println(i);  
 }
 public static int m1(){
   int i=10;
   try{
     return i;
   }finally{
     i++;
     System.out.println("m1的i="+i);  
   }
 }
}编译运行后输出:
m1的i=11
10来看看以上代码的执行原理:
public class ExceptionTest09{
 public static void main(String[] args){
   int i=m1();
   System.out.println(i);  //10
 }
 public static int m1(){
   int i=10;
   try{
     int temp=i;
     return temp;
   }finally{
     i++;
     System.out.println("m1的i="+i);  //11
   }
 }
}在主方法中调用m1()方法,首先执行m1()方法中的System.out.println("m1的i="+i),输出m1的i=11,之后执行主方法中的System.out.println(i); 输出10.
finally语句块还有一个作用,finally语句块是一定会执行的,所以通常在程序中,为了保证某资源一定会释放,一般在finally语句块中释放资源。
import java.io.*;
public class ExceptionTest10{
 public static void main(String[] args){
   FileInputStream fis=null;
   try{
     fis=new FileInputStream("ExceptionTest10.java");
   }catch(FileNotFoundException e){
     e.printStackTrace();
   }finally{
     //为了保证资源一定会释放,将释放资源的代码块放在finally语句块中。
     if(fis!=null){
       try{
         fis.close();
       }catch(IOException e){
         e.printStackTrace();
       }
     }
   }
 }
}
搜索微信公众号“程序员考拉”,欢迎关注!
Java finally关键字
标签:因此 abc NPU 异常 系统 就是 null static 内容
原文地址:https://www.cnblogs.com/naihuangbao/p/9444555.html
下一篇:Python包的导入说明