解析java异常中的finally关键字

解析java异常中的finally关键字

1 含义

try…catch.finally里面的可选结构

2 作用

2.1 内容

finally声明的是一定会被执行的代码

2.2 遇到以下三种情况也还是会去执行

2.2.1 catch里面继续出现了异常
a 示例代码
package Work;
public class Test {
    public static void main(String[] args) {
        try {
            int a=10/0;
        } catch (ArithmeticException e) {
            int[] a=new int[10];
            a[10]=100;
            e.printStackTrace();
        }finally {
            System.out.println("finally里面的代码块");
        }
    }
}

b 示例代码运行截图

在这里插入图片描述

2.2.2 try代码块里面有返回值
a 示例代码
package Work;
public class Test {
    public static void main(String[] args) {
        System.out.println(f1());
    }
    public static int f1(){
        try {
            int a=10/2;
            return 1;
            //此时有返回值也不会立马返回,要等finally执行完成才能返回
            // 若finally里面有返回,则会以finally里面的返回值为准
        } catch (ArithmeticException e) {
            System.out.println("有算术异常");
            return 2;
        }finally {
            System.out.println("finally里面的代码块");
            return 3;
            //会以finally里面的返回值为准
        }
    }
}

b 示例代码运行截图

在这里插入图片描述

2.2.3 catch代码块里面有返回值
a 示例代码
package Work;
public class Test {
    public static void main(String[] args) {
        System.out.println(f1());
    }
    public static int f1(){
        try {
            int a=10/0;
            return 1;
        } catch (ArithmeticException e) {
            System.out.println("正在处理算术异常");
            return 2;
        }finally {
            System.out.println("finally里面的代码块");
            return 3;
            //finally只要有返回值,那么会以finally里面的返回值为准
        }
    }
}

b 示例代码运行截图

在这里插入图片描述

2.3 特殊情况

在try里面遇到System.exit(0)时,此时finally里面的代码不会去执行
示例代码
package Work;
public class Test {
    public static void main(String[] args) {
        System.out.println(f1());
    }
    public static int f1(){
        try {
            System.out.println("使用System.exit(0)方法之前");
            System.exit(0);
            int a=10/0;
            return 1;
        } catch (ArithmeticException e) {
            System.out.println("正在处理算术异常");
            return 2;
        }finally {
            System.out.println("finally里面的代码块");
            return 3;
            //finally只要有返回值,那么会以finally里面的返回值为准
        }
    }
}

示例代码运行截图

在这里插入图片描述

3 怎么用

3.1 使用场景

数据库连接输入输出流键盘输入Scanner等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放.像这些的资源释放,就必须要放在finally里的代码块中

保证这些关闭操作不会被异常中断,能正常关闭

3.2 示例代码

package Work;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入数字n:");
        try {
            int number=scanner.nextInt();
        }catch (InputMismatchException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            scanner.close();
            //就算出现了异常,我们也可以把这个所占用的资源给关闭掉
            System.out.println("scanner对象关闭了");
        }
    }
}

3.3 示例代码运行截图

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SSS4362

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

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

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

打赏作者

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

抵扣说明:

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

余额充值