处理错误
需要关注的问题
- 用户输入错误
- 设备错误
- 物理限制
- 代码错误
- 异常分类
派生于RuntimeException的异常包含下面几种情况:
- 错误的类型转换
- 数组访问越界
- 访问null指针
不是派生于RuntimeException的异常包括 - 试图在文件尾部后面读取数据
- 试图打开一个不存在的文件
- 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在
声明受检查异常
使用throws关键字,在方法的首部同所有的异常类。每个异常类之间用逗号隔开。如何抛出异常
使用throws new Exception();创建异常类
派生于Exception类或派生于Exception的子类
捕获异常
- 捕擎天异常
try{
} catch (Exception e){
}
捕获多个异常
Java 7以后,在catch子句中可以捕获多个异常. 使用 |再次抛出异常与异常链
在catch子句中,可以改变异常的类型,进行再次抛出finally子句
不管异常是否被捕获,finally子句中的代码都被执行。
InputStream in = new FileInputStream("c:\\a.txt");
try{
try{
} finally {
}
} catch(IOException e) {
//异常处理的语句
}
- 带资源的try语句
前提:资源属于实现了AutoCloseable接口的类
try(Resourse res = ...) {
}
- 分析堆栈轨迹元素
getStackTrace方法,可以得到stackTraceelElement对象的一个数组,可以在你的程序中分析这个对象数组。
使用异常机制的技巧
- 异常处理不能代替简单的测试
- 不要过分的细化异常
- 利用异常层次结构
- 不要压制异常
- 在检测时,“苛刻”比放任要好
- 不要羞于传递异常
使用断言(JDK自带的,基本不使用)
断言的概念
断言机制允许在测试期间向代码中插入一些检查语句,使用关键字assert.启用和禁用断言
在默认情况下,断言被禁用。使用java -ea:选项启用使用断言完成参数检查
为文档假设使用断言
记录日志
基本日志
使用全局日志记录器(global logger)
Logger.getGlobal().info(、、、);
高级日志
日志级别:七种
- SEVRE
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST
修改日志管理器配置
本地化
处理器
过滤器
格式化器
记录说明