Java中异常处理方式


针对异常的处理主要有两种方式:

1.抛出异常

遇到异常不进行具体处理,而是继续抛给调用者(throw,throws)抛出异常有三种形式,一是 throw,一个 throws,还有一种系统自动抛异常。throws 用在方法上,后面跟的是异常类,可以跟多个;而 throw 用在方法内,后面跟的是异常对象。

2.try catch 捕获异常

在catch语句块中补货发生的异常,并进行处理。
在这里插入图片描述
try-catch捕获异常的时候还可以选择加上finally语句块,finally语句块不管程序是否正常执行,最终它都会必然执行。

三道经典异常处理代码题

1.题目一

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        try {
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            System.out.print("3");
        }
    }
}

执行结果:31
try、catch。finally 的基础用法,在 return 前会先执行 finally 语句块,所以是先输出finally 里的 3,再输出 return 的1。

2.题目二

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        try {
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            return 3;
        }
    }
}

执行结果:3
try 返回前先执行 finally,结果 finally里不按套路出牌,直接 return 了,自然也就走不到 try 里面的 return 了。finally 里面使用 return 仅存在于面试题中,实际开发这么写要挨吊的

3.题目三

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        int i = 0;
        try {
            i = 2;
            return i;
        }finally {
           i = 3;
        }
    }
}

执行结果:2
大家可能会以为结果应该是 3,因为在 return 前会执行 finally,而 i 在 finally 中被修改为 3 了,那最终返回 i 不是应该为 3 吗?
但其实,在执行 finally 之前,JVM 会先将 i 的结果暂存起来,然后 finally 执行完毕后,会返回之前暂存的结果,而不是返回 i,所以即使 i 已经被修改为 3,最终返回的还是之前暂存起来的结果 2。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值