抛出异常

Posted zythonc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抛出异常相关的知识,希望对你有一定的参考价值。

更新记录

【1】2020.02.09-18:15

1.完善内容

正文

我们去学习Java的异常处理的时候,肯定写过抛出异常的方法
但是如果你将代码改成这个样子:

public class exception {
    public static void test() throws ClassCastException{
        int[] arr = new int[-3];
    }
    public static void main(String[] args) {
        int a = 3, b = 0;
        System.out.println("start");
        try {
            test();
        }
        catch(ClassCastException cce) {
            cce.printStackTrace(System.out);
        }
        catch(Exception e) {
            e.printStackTrace(System.out);
        }
        System.out.println("finish");
    }
}

上面的实例中test本应该抛出NegativeArraySizeException异常
然而我们将它改为了ClassCastException
那运行结果怎么样呢?

start
java.lang.NegativeArraySizeException
    at exception.test(exception.java:3)
    at exception.main(exception.java:9)
finish

从上面的运行结果中,我们可以看出,catch代码块依然正常的接收到了异常信息
那能不能说明catch(ClassCastException cce)与throws ClassCastException正常运作只不过是printStackTrace(System.out)的内容改变了呢?
别急着下结论,先再改改代码观察一下结果
这一次,我们删除catch(Exception e)

public class exception {
    public static void test() throws ClassCastException{
        int[] arr = new int[-3];
    }
    public static void main(String[] args) {
        int a = 3, b = 0;
        System.out.println("start");
        try {
            test();
        }
        catch(ClassCastException cce) {
            cce.printStackTrace(System.out);
        }
        System.out.println("finish");
    }
}

以下是运行结果:

start
Exception in thread "main" java.lang.NegativeArraySizeException
    at exception.test(exception.java:3)
    at exception.main(exception.java:9)

结果怎么样?finish没有被输出,也就是说NegativeArraySizeException异常没有被接收到
所以我们可以看出:throws ClassCastException并不是意味着这个类抛出的异常全是ClassCastException异常
也有可能是别的。

另外,直接自定义名称是不可以的,像

public static void test() throws LalalaException{
    int[] arr = new int[-3];
}

直接写是不行的,必须实现LalalaException类。

以上是关于抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

对话框片段已添加异常未抛出

使用片段的谷歌地图

为什么Java编译器允许在throws部分中列出异常,该方法无法抛出异常

方便调试使用的代码片段

从线程抛出异常并没有给出预期的结果

Android - 接口callBack抛出空指针异常