第11章 异常、断言、日志和调试
来源:互联网 发布:天策雪河军爷捏脸数据 编辑:程序博客网 时间:2024/06/05 17:17
1.处理错误
如果由于出现错误而使得某些操作没有完成,程序应该:
·返回到一种安全状态,并能够让用户执行一些其他的命令;或者
·允许用户保存所有操作的结果,并以适当的方式终止程序。
程序中可能会出现的问题:
(1)用户输入错误
(2)设备错误
(3)物理限制
(4)代码错误
1.1 异常分类
Java异常层次结构的一个简化图。
在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。
Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
由程序错误导致的异常属于RuntimeException。派生于RuntimeException的异常包含:
·错误的类型转换
·数组越界访问
·访问空指针
程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。不是派生于RuntimeException的异常包括:
·试图在文件尾部后面读取数据
·试图打开一个不存在的文件
·试图根据给定的字符串查找Class对象,而这个字符串表示的类不存在。
如果出现RuntimeException异常,那么一定是你的问题。
1.2 声明已检查的异常
throws关键字
应该抛出异常的情况:
(1)调用一个抛出已检查异常的方法,例如,FileInputStream构造器。
(2)程序运行过程中发现错误,并且利用throw语句抛出一个已检查异常。
(3)程序出现错误。
(4)Java虚拟机和运行时库出现的内部错误。
不要声明Java内部的错误,即从Error继承的错误,也不应该声明从RuntimeException继承的那些未检查异常。
警告:如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能比超类方法中声明的异常更通用(子类方法可以抛出更特定的异常,或者不抛出任何异常)。如果超类方法没有抛出任何已检查异常,子类也不能抛出任何已检查异常。
1.3 如何抛出异常
throw关键字
(1)找到一个合适的异常类
(2)创建这个类的一个对象
(3)将对象抛出
String readData(Scanner in) throws EOFException{ ... while(...){ if(!in.hasNext()){ //EOF encountered if(n<len) throw new EOFException(); } ... } return s;}
1.4 创建异常类
class FileFormatException extends IOException{ //习惯上定义的类包含两个构造器,一个默认构造器,一个带有详细描述信息的构造器 public FileFormatException(){} public FileFormatException(String gripe){ //超类Throwable的toString方法将会打印gripe super(gripe); }}
2.捕获异常
2.1 try/catch/finally
Java中try,catch,finally的用法
2.2 再次抛出异常与异常链
在catch语句中可以抛出一个异常,这样做的目的是改变异常的类型。
try{ access the database}catch(SQLException){ throw new ServletException("database error:"+e.getMessage());}
//将原始异常设置为新异常的“原因”
try{ access the database}catch(SQLException){ Throwable se=new ServletException("database error"); se.initCause(e); throw se;}
//重新得到原始异常
Throwable e=se.getCause();
3.使用异常机制的技巧
(1)异常处理不能代替简单的测试
(2)不要过分的细化异常
(3)利用异常层次结构
不要只抛出RuntimeException异常,应该寻找更加适当的子类或创建自己的异常类。
不要只捕获Throwable异常,否则会使程序代码更难读、更难维护。
考虑已检查异常和未检查异常的区别。不要为逻辑错误抛出已检查异常。
将一种异常转换为另一种更加合适的异常时不要犹豫。
(4)不要压制异常
(5)在检测错误时,苛刻要比放任更好
(6)不要羞于传递异常
5,6可归纳为“早抛出,晚捕获”。
4.使用断言
Java陷阱之assert关键字
5.Junit
Junit使用教程
阅读全文
0 0
- 第11章 异常、断言、日志和调试
- 2015 7 6 Java核心技术卷一 第11章 异常 断言 日志和调试
- 11 异常, 日志, 断言和调试
- 异常、日志、断言和调试
- 异常、断言、日志和调试
- 笔记:异常、日志、断言和调试
- Java的异常、断言、日志和调试
- Java04异常、断言、日志和调试
- [JAVA基础]异常、断言、日志和调试
- Java核心技术卷一 第11章 异常、断言和日志
- 《Java核心技术(第八版)》笔记之第11章异常、断言和调试
- java-异常/断言/日志/调试
- 【java核心技术笔记】异常、日志、断言和调试
- Java复习笔记---异常,断言,日志和调试
- [core java学习笔记][第十一章异常断言日志调试]
- JAVA基础【7.2】《Java核心技术1》异常、断言、日志和调试-断言
- 7 异常、断言和日志
- java 异常、断言和日志
- 深度学习中对 end2end的理解
- spring单例模式
- Android开发学习(13)Retrofit访问REST服务
- 工作笔记,读取txt中指定内容
- JAVA字符串格式化-String.format()的使用
- 第11章 异常、断言、日志和调试
- javascript高级程序设计第三版 第10章 DOM
- 快速排序
- easy ui 隐藏文本框
- Spring session使用Redis 这么简单
- checksec及其包含的保护机制
- STL库函数获取字符串包含的字符集(unique()函数)
- Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器
- 微信公众号开发的几点总结