前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java核心技术 卷I 基础知识 学习笔记(7)

Java核心技术 卷I 基础知识 学习笔记(7)

作者头像
发布2019-02-25 14:42:13
4940
发布2019-02-25 14:42:13
举报
文章被收录于专栏:WD学习记录WD学习记录

参考:Java核心技术 卷I 基础知识 第七章

异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。

所有的异常都是由Throwable继承而来,但在下一层立即分解为两个分支:Error和Exception。

Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全地终止之外,再也无能为力了。

在设计Java程序时,需要关注Exception层次结构。这个层次结构又分解为两个分支。一个分支派生于RuntimeException,另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException,而程序本身没有问题。但由于像I/O错误这类问题导致的异常属于其他异常。

派生于RuntimeException的异常包含下面几种情况:

  • 错误的类型转换
  • 数组访问越界
  • 访问null指针

不是派生于RuntimeException的异常包括:

  • 试图在文件尾部后面读取数据
  • 试图打开一个不存在的文件
  • 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在

Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受检查异常。所有的其它异常称为受查异常。

在遇到下面四种情况时应该抛出异常:

(1)调用一个抛出受查异常的方法

(2)程序运行过程中发现错误,并且利用throw语句抛出一个受查异常

(3)程序出现错误。例如a[-1]=0会抛出一个ArrayIndexOutOfBoundsException这样的非受查异常

(4)Java虚拟机和运行时库出现的内部错误

总之,一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的受查异常,编译器就会发出一个错误消息。

通常应该捕获那些知道如何处理的异常,而将那些不知道怎样处理的异常继续进行传递。

在catch子句中可以抛出异常,目的是改变异常类型。

堆栈轨迹是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。

异常机制使用的几个技巧:

  1. 异常处理不能代替简单的测试,只在异常情况下使用异常机制
  2. 不要过分细化异常
  3. 利用异常层次结构
  4. 不要压制异常
  5. 在检测错误时,“苛刻”要比放任更好
  6. 不要羞于传递异常

断言机制允许在测试期间向代码中插入一些检查语句,当代码发布时,这些插入的检测语句会被自动地移走。

当启用或禁用断言时,不必重新编译程序,启用或禁用断言是类加载器的功能。

使用断言的时间:

  • 断言失败是致命的、不可恢复的错误
  • 断言检查只用于开发和测试阶段
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档