在阅读异常的时候,我会总是遇到检查异常和未检查的异常,所以想知道如何区分哪个是什么?
编辑:我想知道如果我创建任何异常类,那么我如何创建作为一个检查或作为未选中?
每个人的意义是什么?
解决方法
检查除
java.lang.RuntimeException或java.lang.Error的子类之外的所有Throwables.适当地说,在
Java中,“异常”是java.lang.Exception的子类,“errors”是java.lang.Error和java.lang的子类.Throwable通常不会直接进行子类化.
程序不应该创建自己的错误子类(尽管文档相当模糊),所以通常你总是创建异常,如果你不想检查它,使用RuntimeException.
要知道在运行时,如果你有一个被检查的例外,你可以使用:
if(throwable instanceof Exception && !(throwable instanceof RuntimeException)) { // this is a checked Exception }
检查的异常是必须在catch子句中处理的或被声明为在方法签名中抛出的异常;编译器强制执行此操作.一般来说,一个使用检查异常的例外,应该由调用代码处理异常,而未检查的异常是由于编程错误导致的条件,应通过更正代码来修复.
那就是说Java社区里有很多关于使用被检查的异常和无处不在的异常的有效性的争论 – 这个答案深入讨论的主题.
编辑2012-10-23:为了回应评论(这是相当有效的),为了澄清,以下是确定捕获的Throwable是否是被检查的Throwable而不是检查的异常所需要的:
if(obj instanceof Throwable && !(obj instanceof RuntimeException) && !(obj instanceof Error)) { // this is a checked Throwable - i.e. Throwable,but not RuntimeException or Error }
如果所讨论的对象是Throwable的实例(例如被捕获),则只需要上述’if’的第二部分(例如,Throwable的测试是冗余的).