博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java核心技术 卷I 基础知识 学习笔记(7)
阅读量:4169 次
发布时间:2019-05-26

本文共 1167 字,大约阅读时间需要 3 分钟。

参考: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. 不要羞于传递异常

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

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

使用断言的时间:

  • 断言失败是致命的、不可恢复的错误
  • 断言检查只用于开发和测试阶段

 

转载地址:http://eryai.baihongyu.com/

你可能感兴趣的文章
Yocto tips (19): Yocto SDK Toolchian的使用
查看>>
Yocto i.MX6 (TQIMX6) (04) : 使用mjpg-streamer做一个WebCam Server
查看>>
Nexus 7 Cyanogenmod OS Compile and errors
查看>>
Yocto tips (20): Yocto中qemu模拟器的使用,以zynq Cortex-A9为例
查看>>
打造嵌入式ARM Linux防火墙:1. iptables基础
查看>>
4G模块SIMCOM7100 LTE在ARM Linux下使用PPPD上网
查看>>
为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决
查看>>
原生Android系统的第一次开机google验证的解决
查看>>
S5P4418与S5P6618的Android boot.img的解压与压缩, Sparse ext4文件系统
查看>>
【EVB-335X-II试用体验】 u-boot与kernel的编译以及本地repo的建立
查看>>
【EVB-335X-II试用体验】 上手试用与资源使用
查看>>
【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用
查看>>
<<C++程序设计原理与实践>>粗读--chapter0 chapter1 chapter2
查看>>
<<C++程序设计原理与实践>>粗读--chapter3 chapter4 Chapter5
查看>>
<<C++程序设计原理与实践>>粗读 -- chapter8 Chapter9
查看>>
Linux Qt程序打包成一个可执行文件
查看>>
DragonBoard 410C中的Fastboot与调试串口注意事项
查看>>
跨系统的录音格式兼容性问题: iOS Android
查看>>
JVM 的垃圾回收器
查看>>
Mybatis的缓存
查看>>