今天在查看spring 源码的时候,发现有一个类throw 了一个nullpointerException , 但是方法头,并没有throws ,也没有加try catch ,这不对啊,Exception 按道理来说必须throws,而且最终都要有一个try catch 进行捕获,而这里没有任何抛出和捕获,所以自己就写了一个测试用例。

  • 编译正常通过


public void exceptionTest()

    IllegalArgumentException e = new IllegalArgumentException("nullpointer");
    throw e;

}
                    

  • 编译不能通过


public void exceptionTest() {

    IOException e = new IOException("nullpointer");
    throw e;

}
                    

  • 编译正常通过


public void exceptionTest() {

    RuntimeException e = new RuntimeException(“nullpointer”);
    throw e;

}
                    

  • 编译不能通过


public void exceptionTest() {

    Exception e = new RuntimeException("nullpointer");
    throw e;

}
                    

checked exception告知外部用户此方法在某些情况下可能抛出这个错误,你应该捕获并处理错误以便程序在可能的情况下 能够继续运行下去(当然你也可以通过throws声明将异常再往上层暴露,但终究有一层是要去catch这个异常的)。

这些错误往往是可预期而且可以作为异常流来处理的。checked exception作为语法上的一种强制措施让你在代码编译阶段就必须对异常进行处理。
比如IOException,当你打开、读取、写入文件时可能抛出这个错。

你可以捕获并提示最终用户『文件操作失败,请重试』等信息,而不是任由它抛到JVM中导致当前线程挂掉。
而runtime exception可能产生于运行时的一些不可预知的时刻,而且往往产生后没有有效的手段处理,因此不需要强制对其进行声明和捕获。
你可以认为checked exception就是要强制你去处理这个异常(不管你throws多少层,你终归要在某个地方catch它); 而runtime exception则没有这个限制,你可以自由选择是否catch。

Copyright © 2019-2020 2024-10-13 05:39:17