zoukankan      html  css  js  c++  java
  • 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就可以了

  • 相关阅读:
    图的概述
    "《算法导论》之‘排序’":线性时间排序
    “《算法导论》之‘查找’”:散列表
    如何使用VS2013本地C++单元测试框架
    “《算法导论》之‘查找’”:顺序查找和二分查找
    查找算法概述
    第二部分 位运算符、赋值运算符、三元及一元运算符和语句分类
    LINQ 的查询_联表、分组、排序
    第二部分 关系与比较运算符 、 自增与自减运算符、条件逻辑运算符
    LINQ to Sql系列一 增,删,改
  • 原文地址:https://www.cnblogs.com/CUI-S/p/8953040.html
Copyright © 2011-2022 走看看