Java基础异常中的finally关键字

关于try…catch中的finally子句

1、在finally子句中的代码是最后执行的,并且是一定执行的,即使try语句块中的代码块出现了异常

finally子句必须和try一起出现,不能单独编写

2、finally语句通常使用在哪些情况下呢?

通常在finally语句块中完成资源的释放/关闭

因为finally中的代码比较有保障

即使try语句块中的代码出现异常,finally中代码也会正常执行

示例代码01:

public class ExceptionTest10 {
    public static void main(String[] args) {
        FileInputStream fis = null;//声明位置放到try外面。这样在finally中才能使用
        try {
            //创建输入流对象
            fis = new FileInputStream("D:\\Noepad++\\config.xml");
            //开始读文件。。。

            String s = null;
            //这里一定出现空指针异常
            s.toString();
            System.out.println("HelloWorld");

            //流使用完需要关闭,因为流是占用资源的
            //即使以上的程序出现异常,流也要关闭
            //放在这里有可能流关闭不了
            //file.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(NullPointerException e){
            e.printStackTrace();
        }finally {
            System.out.println("Hello 浩克!");
            //流的关闭放在这里比较安全
            //finally中的代码是一定会执行的
            //即使try中出现了异常
            if(!(fis == null)){//避免空指针异常
                try {
                    //close()方法,采用捕捉的方式
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("HelloWorld!");
    }
}

运行结果:

在这里插入图片描述
3、放在finally语句块中的代码是一定会执行的【再次强调!!】

示例代码02:

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

运行结果:

在这里插入图片描述

示例代码03:

public class ExceptionTest12 {
    public static void main(String[] args) {

        try{
            System.out.println("try..");
            // 退出JVM
            System.exit(0);// 退出JVM之后,finally语句中的代码就不执行了!
        }finally{
            System.out.println("finally..");
        }
    }
}

运行结果:

在这里插入图片描述
4、finally面试题

代码:

//finally面试题
public class ExceptionTest13 {
    public static void main(String[] args) {
        int reValue = m();
        System.out.println(reValue);//100
    }
    public static int m(){
        int i = 100;
        /*
    java语法规则(有一些规则是不能破坏的,一旦这么说了,就必须这么做!):
        java中有一条这样的规则:
            方法体中的代码必须遵循自上而下顺序依次逐行执行(亘古不变的语法!)
        java中海油一条语法规则:
            return语句一旦执行,整个方法必须结束(亘古不变的语法!)
     */
        try{
            // 这行代码出现在int i = 100;的下面,所以最终结果必须是返回100
            // return语句还必须保证是最后执行的。一旦执行,整个方法结束。
            return i;
        }finally{
            i++;
        }
    }


}
运行结果:
    100
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五度鱼Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值