首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8编程精粹-异常的“第一次”

关注的都是帅哥美女,(>Д

Throwable表示任何可以作为异常被抛出的类。

Throwable 的子类对象分为两种

Error,编译期和系统错误,除特殊情况,一般不用SE关心

Exception,可被抛出的基本类型,在 Java 类库、用户方法以及运行时故障中都可能抛出 Exception 型异常。所以 Java 程序员关心的基类型通常是 Exception。

Java 中异常的数目在持续增加,罗列它们是毫无意义的。而且第三方框架也可能会有自己的异常。因此对于异常,关键是理解概念以及如何使用它们。

异常的基本概念

异常是用名称代表发生的问题,最好可以望文知意。

异常并非全是在 java.lang 包里定义,其实有很多:

尤其是所有的输入/输出异常都继承 java.io.IOException。

特别的 RuntimeException

如果对传递给方法的每个引用都检查是否为 null,这也太恶心了。如下所示:

但其实不必亲自做,因为这是 Java 运行时检查的一部分。如果调用null 引用,Java 会自动抛 NPE,所以上述代码其实多余。

属于运行时异常的类型有很多,会自动被 JVM 抛出,这些异常都继承于 RuntimeException,构成了一组具有相同特征和行为的异常类型。

也不需要在异常说明中声明方法将抛出 RuntimeException 类型的异常,因为它们也是“不受检查异常”。这种异常属于错误,将被自动捕获,不用亲自动手。尽管不用捕获,但还是可以编码抛出 RuntimeException异常。

编程错误

RuntimeException 代表编程错误:

无法预料的错误。比如 null 引用

应该在代码中检查的错误。(比如 ArrayIndexOutOfBoundsException,注意数组大小)

它们方便调试定位代码错误地方。

不捕获运行时异常

编译器没有在这个问题上对异常进行强制检查,RuntimeException 类型异常也许会穿越所有执行路径直达 main() ,而不被捕获。

要明白到底发生了什么,可以试试下面的例子:

如果 RuntimeException 没被捕获而直达 main(),那么在程序退出前调用printStackTrace() 方法。

RuntimeException是个特例,编译器不需要异常说明,其输出被报告给了 System.err。

只能在代码中忽略 RuntimeException类型的异常,因为所有受检查类型异常的处理都是由编译器强制实施的。

Java 的异常处理机制被设计用来处理一些烦人的运行时错误,这些错误往往是由代码控制能力之外的因素导致的;然而,它对于发现某些编译器无法检测到的编程错误,也是非常重要的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200610A0T90700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券