java异常不匹配问题

java的异常处理是为了提高程序健壮性的。

当发生异常的时候,我们把这个异常捕获到,或者throw出去。然后对这些异常的情况进行处理。并且异常发生之后的代码仍然会执行,这样就能提高程序的健壮性。如下

public class Test {

    public static void main(String[] args) {
        
        System.out.println("start");
        try {
            FileInputStream fins = new FileInputStream("不存在的文件.txt");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("end");
        
    }
    
}

控制台打印信息

start
end
java.io.FileNotFoundException: 不存在的文件.txt (系统找不到指定的文件。)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at com.designPattern.test.Test.main(Test.java:14)

根据控制台的打印信息,我们可以知道;虽然发生了文件不存在异常,但是之后的代码仍然执行了。也就是当程序出现某个异常的时候,我们能捕获到,进行处理,那么在用户看来程序是正确的。这样,程序的健壮性就提高了。但是,如果发生的异常与catch到的异常不匹配的时候会发生什么呢?如下

public class Test {

    public static void main(String[] args) {
        
        System.out.println("start");
        
        
        try {
            FileInputStream fins = new FileInputStream("存在的文件.txt");
            int x=2/0;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("end");
        
    }
    
}

控制台打印信息

start
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at com.designPattern.test.Test.main(Test.java:15)

我们看到,发生异常之后的程序没有正常执行。那么原因是为什么呢?

因为发生的异常是 0做除数引起的 ArithmeticException 异常,而我们catch到的却是 IOException。java异常的初衷是,捕获特定的异常,当发生某个特定的异常的时候,我们进行相应的处理补救。所以,后面代码才没有执行。

而解决的方法也很简单,把 IOException 换成 Exception就可以了

 

转载于:https://www.cnblogs.com/CUI-S/p/8953040.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值