异常、断言和日志
处理错误
程序中可能出现的错误和类型
- 用户输入错误
- 设备错误
- 物理限制
- 代码错误
如果某个方法不能够采用正常的途径完成它的任务,可以通过另外一个路径退出方法。在这种情况下方法并不返回任何值,而是抛出一个封装了错误信息的对象,且这个方法将会退出。
异常分类
异常对象派生自Throwable类的一个实例。
- Throwable派生Error和Exception。
- Error:java运行时系统内部错误和资源耗尽错误。
- Exception派生出RuntimeException和其他类异常。
- 由编程错误导致的异常属于RuntimeException,如果程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。
如果出现RuntimeException一般都属于程序员编程问题
派生自RuntimeException包括
- 数组的强制类型转换
- 数组访问越界
- 访问null指针
不派生自RuntimeException包括
- 超过文件末尾继续读取数据
- 打开一个不存在的文件
- 根据字符串对象查找不存在的Class对象
非检查型异常和检查型异常
- 非检查型异常:派生于Error或RuntimeException类的所有异常
- 检查型异常:所有其他的异常
声明检查型异常
- 一个方法必须声明所有可能抛出的检查型异常,而非检查型异常要么在你的控制之外(Error),要么是由从一开始应该避免的情况所导致的(RuntimeException)
- 如果在子类中覆盖了超类的一个方法,子类方法中声明的检查型异常不能比超类方法中声明的异常更通用。(子类方法可以抛出更特定的异常,或者根本不抛出任何异常,如果超类方法没有抛出任何检查型异常,子类也不能抛出任何检查型异常)
使用断言
断言的概念
- 断言机制允许在测试期间向代码中插入一些检查,而在生产代码中会自动删除这些检查(如果在程序中含有大量这种检查,程序运行起来慢很多)。
启用和禁用断言
- 在默认情况下,断言是禁用的。不必重新编译程序来启用或禁用断言。启用或禁用断言是类加载器的功能
日志
该部分日志API使用的是java自带的api,并非第三方Log4J 2或者SLF4J等API。
日志API使用的优点()
- 可以很容易的取消全部日志记录,或者仅仅取消某个级别以下的日志,而且可以很容易地再次打开日志开关。
- 可以很简单地禁止日志记录,因此,将这些日志代码留在程序中地开销很小
- 日志记录可以被定向到不同地处理器,如在控制台显示、写至文件,等等。
- 日志记录器和处理器都可以对记录进行过滤。过滤器可以根据过滤器实现器指定地标准丢弃那些无用地记录项。
- 日志记录可以采用不同地方式格式化,例如,纯文本或XML。
- 应用程序可以使用多个日志记录器,它们使用与包名类似的有层次结构的名字,例如,com.mycompany.myapp。
- 日志系统的配置由配置文件控制。
基本日志
要生成简单的日志记录,可以使用全局日志记录器(global)
高级日志
通常日志有一下7个级别。
- SEVERE
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST
Comments | 0 条评论