Throwable 表示任何可以作为异常被抛出的类。
Throwable 的子类对象分为两种
Java 中异常的数目在持续增加,罗列它们是毫无意义的。而且第三方框架也可能会有自己的异常。因此对于异常,关键是理解概念以及如何使用它们。
异常的基本概念
异常是用名称代表发生的问题,最好可以望文知意。
异常并非全是在 java.lang 包里定义,其实有很多:
尤其是所有的输入/输出异常都继承 java.io.IOException。
特别的 RuntimeException
如果对传递给方法的每个引用都检查是否为 null,这也太恶心了。如下所示:
但其实不必亲自做,因为这是 Java 运行时检查的一部分。如果调用 null 引用,Java 会自动抛 NPE,所以上述代码其实多余。
属于运行时异常的类型有很多,会自动被 JVM 抛出,这些异常都继承于 RuntimeException,构成了一组具有相同特征和行为的异常类型。
也不需要在异常说明中声明方法将抛出 RuntimeException 类型的异常,因为它们也是“不受检查异常”。这种异常属于错误,将被自动捕获,不用亲自动手。尽管不用捕获,但还是可以编码抛出 RuntimeException异常。
编程错误
RuntimeException 代表编程错误:
它们方便调试定位代码错误地方。
不捕获运行时异常
编译器没有在这个问题上对异常进行强制检查,RuntimeException 类型异常也许会穿越所有执行路径直达 main() ,而不被捕获。
要明白到底发生了什么,可以试试下面的例子:
如果 RuntimeException 没被捕获而直达 main(),那么在程序退出前调用printStackTrace() 方法。
RuntimeException是个特例,编译器不需要异常说明,其输出被报告给了 System.err。
只能在代码中忽略 RuntimeException类型的异常,因为所有受检查类型异常的处理都是由编译器强制实施的。
Java 的异常处理机制被设计用来处理一些烦人的运行时错误,这些错误往往是由代码控制能力之外的因素导致的;然而,它对于发现某些编译器无法检测到的编程错误,也是非常重要的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。