在阅读有关异常的内容时,我总是会遇到受控异常和非受控异常,所以想知道如何区分哪个是什么?
编辑:我想知道我是否创建任何异常类,那么如何创建为已检查或未检查的异常类?
每个的意义是什么?
All Throwable
s 除了以下子类java.lang.RuntimeException
or java.lang.Error
被检查。正确地说,在 Java 中,“异常”是java.lang.Exception
,“错误”是子类java.lang.Error
and java.lang.Throwable
通常不直接子类化。
程序不应该创建自己的Error
子类(尽管文档对此相当模糊),所以通常您总是创建Exceptions
, 用一个RuntimeException
如果你不想让它被检查。
在运行时知道是否有检查例外你可以使用:
if(throwable instanceof Exception && !(throwable instanceof RuntimeException)) {
// this is a checked Exception
}
检查异常是一种必须在 catch 子句中处理或在方法签名中声明为抛出的异常;编译器强制执行此操作。通常,检查异常用于应由调用代码处理的异常,而未检查异常则用于编程错误导致的情况,应通过更正代码来修复。
也就是说,Java 社区中关于到处使用检查异常与未检查异常的功效存在很多争论 - 这是本答案中深入讨论的一个主题。
编辑2012年10月23日:为了回应评论(这是非常有效的),澄清一下,以下是确定捕获的是否需要的内容:Throwable
是一个检查过的Throwable
与检查相反Exception
:
if(obj instanceof Throwable && !(obj instanceof RuntimeException) && !(obj instanceof Error)) {
// this is a checked Throwable - i.e. Throwable, but not RuntimeException or Error
}
如果有问题的对象是known成为一个实例Throwable
(例如,它被捕获了),只需要上述“如果”的第二部分(例如,测试 Throwable 是多余的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)