finally语句的使用

关于try..catch中的final子句:

package com.javase.Exception;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


/*
关于try..catch中的final子句:
    1 在finally字句中的代码是最后执行的,并且一定会执行。及时try语句块中的代码出现了异常,他也会执行。
        finally子句必须和try一起出现,不能单独编写。
        
    2 finally语句通常使用在哪些情况下呢?
        通常在finally语句块中完成资源的释放/关闭。
        因为finally中的代码比较有保障。
        即使try语句块中的代码出现异常,finally中代码也会正常执行。
*/
public class ExceptionTest10 {
    public static void main(String[] args) {
        FileInputStream fls = null;// 声明位置当到try外面,这样在finally中才能用。
        try {
            // 创建输入流对象
             fls = new FileInputStream("C:\jetbrains-agent.jar");
            // 开始读文件...
            
            //
            String s = null;
            // 这里一定会出现空指针异常!
            s.toString();
            
            // 流使用完需要关闭,因为流是占用资源的。
            // 及时以上程序出现异常,流也必须要关闭。
            // 放在这里流可能关闭不了
            fls.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NullPointerException e){
            e.printStackTrace();
        } finally {
            System.out.println("finally 执行啦!");
            // 流的关闭放在这里比较保险。
            // finally中的代码一定会执行的。
            // 即使try中出现了异常。
            if(fls != null){
                try {
                    // close方法有异常,采用捕捉的形式。
                    fls.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }
    
        System.out.println("Hello World!");
    }
}

finally语句块中的代码是一定会执行的【再次强调。】

package com.javase.Exception;
/*
finally语句
    放在finally语句块中的代码是一定会执行的【再次强调。】
*/
public class ExceptionTest11 {
    public static void main(String[] args) {
        /*
        try和finally,没有catch可以吗?可以。
            try不能单独使用。
            try finally可以联合使用。
        以下代码的执行顺序:
            先执行try...
            在执行finally...
            最后执行 return(return语句只要执行方法必然结束。)
         */
        try {
            System.out.println("try...");
            return;
        } finally {
            // finally中的语句会执行。能执行到。
            System.out.println("finally");
        }
        
        // 这里不能写语句,因为这个代码是无法执行到的。
        // System.out.println("Hello World!");//Unreachable statement
    }
}

什么情况下finally语句不会执行:

package com.javase.Exception;


public class ExceptionTest12 {
    public static void main(String[] args) {
        try {
            System.out.println("try...");
            // 退出JVM
            System.exit(0);
        } finally {
            // finally中的代码不会执行。
            System.out.println("finally");
        }
    }
}
原文地址:https://www.cnblogs.com/xlwu/p/13257947.html