Core Java笔记—第11章 异常与调试

11.1 处理错误

所有的异常都是由Throwable类继承而来,分为Error和Exception两个分支.

Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误.如果出现这样的内部错误,除了通知用户,并尽力使程序安全地终止之外,再也无能为力了.
在进行Java程序设计的时候,需要关注Exception层次结构,这个层次结构又分解为两个分支:一个分支是派生RuntimeException,另一个分支包含其他异常.划分两个分支的规则是:由程序错误导致的异常属于RuntimeException,曾经能够正确运行,而由于某些情况(例如IO错误)导致的异常不属于RuntimeException.

派生于RuntimeException的异常包含下面几种情况:
错误的类型转换
数组访问越界
访问空指针

“如果出现RuntimeException异常,就一定是你的问题”是一条相关有道理的规则.

Java语言规范将派生于RuntimeException类或Error类的所有异常称为“未检查(unchecked)异常”,其他的异常称为“已检查(checked)异常”.

如果一个方法有可能抛出多个已检查异常,就必须在方法的首部列出所有的异常类,每个异常类之间用逗号隔开.但是,不需要声明Java的内部错误,即从Error类继承的那些异常.任何程序代码都具有抛出这类异常的潜能,而我们对此却没有任何控制能力.同样,也不应该声明从RuntimeExceptioon继承来的那些未检查异常.

11.2 捕获异常

如果调用一个抛出已检查异常的方法,就必须对它进行处理,或者将它传递出去.通常,应该捕获那些知道如何处理的异常,而将不知道如何处理的异常传递出去.

不允许在子类的throws说明符中出现超过超类方法所列出的异常类范围.

当finally子句包含return语句时,会出现一种意想不到的结果,假设利用return语句从try语句快中退出,在方法返回之前,finally语句块的内容将会被执行.如果finally语句块中也包含一个return语句,那么这个返回值将会掩盖原始的返回值.

11.5 使用断言

在JDK 1.4中,Java语言引入了新关键字assert.在默认情况下,断言是禁用的,可以在运行程序时用-enableassertions或-ea选项启用它:java -enableassertions MyApp.
需要注意的是,在启用或禁用断言时不必重新编译程序.启用或禁用断言是类加载器的功能,当断言被禁用时,类加载器将跳过断言代码.也可以在某个类或某个包中使用断言:java -ea:MyClass -ea com.company.mylib... MyApp.也可以用选项-disableassertions或-da禁用某个特定类和包的断言.

11.6 调试技术

JUnit
Logger
printStackTrace
错误信息重定向到文件
-verbose标志,观察类的加载过程
-Xlint选项
程序监控jconsole
-Xprof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值