异常、断言和日志

处理错误

程序中可能出现的错误和类型

  • 用户输入错误
  • 设备错误
  • 物理限制
  • 代码错误
    如果某个方法不能够采用正常的途径完成它的任务,可以通过另外一个路径退出方法。在这种情况下方法并不返回任何值,而是抛出一个封装了错误信息的对象,且这个方法将会退出。

异常分类

异常对象派生自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

这个家伙很懒,啥也没有留下😋