zoukankan      html  css  js  c++  java
  • 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");
            }
        }
    }
  • 相关阅读:
    Codeforces Round #547 F1&F2. Same Sum Blocks(贪心)
    Codeforces Round #547 D. Colored Boots(贪心)
    Codeforces Round #547 C. Polycarp Restores Permutation(二分枚举/数学+模拟)
    CCF 201812-4 数据中心(最小生成树)
    CCF【小明放学&小明上学】
    TIME_WAIT状态
    ping的详细过程
    两段不相邻子段和之和最大
    神水一题之“Who's in the Middle”
    日进一步之“A Knight's Journey”
  • 原文地址:https://www.cnblogs.com/xlwu/p/13257947.html
Copyright © 2011-2022 走看看