这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战
异常
Java异常体系图:
- Error和Exception下面的RunTimeException及其子类属于不需要强制捕获的异常。
- 其他 exception 以下的其他的异常及其子类都需要强制捕获异常。
- 异常体可以往下传递。
- 不过这种用法平时并不怎么用。
一些使用异常中的建议:
- 尽量使用JDK已定义异常!
- 自定义异常应该从RuntimeException派生。
- 先定义BaseException,再其派生子类。
- 自定义异常应该提供多个构造方法。
断言
我们开发中看某些框架的代码的时候会看到assert xxx这种写法,这就是java的断言机制。
JVM默认关闭断言指令:
- 给Java虚拟机传递-ea参数启用断言
- 只能在开发和测试阶段启用断言
日志
日志是为了替代System.out.println(),可以定义格式,重定向到文件等 日志可以存档,便于追踪问题 日志记录可以按级别分类,便于打开或关闭某些级别 可以根据配置文件调整日志,无需修改代码。
JDK的log
jdk 内置logging(7个日志级别,默认为infoSEVERE WARNING INFO (默认级别) CONFIG FINE FINER FINEST)
代码中设置level,可以指定输出固定的那个内容。
缺点:
- JVM启动时读取配置文件并完成初始化
- JVM启动后无法修改配置
- 需要在JVM启动时传递参数 -Djava.util.logging.config.file=config-file-name
Commons Log
是由Apache创建的一个日志模块,一般的用法如下:
我们开发中用的最多的还是下面Log4J。
Log4J
目前最流行的日志方式
组件化日志系统
- appender 用来把日志输出不同的目的地
- filter 用来过滤日志
- layout 格式化输出格式
- console 等等 输出到的地方
我们不需要关心这个,只需要通过配置文件来配置
通过Commons Logging也可以实现log4j
使用Log4j:
通过Commons Logging实现日志,不需要修改代码即可使用Log4j 、
使用Log4j只需要把log4j2.xml和相关jar放入classpath 、
如果要更换Log4j,只需要移除log4j2.xml和相关jar 只有扩展Log4j时,才需要引用Log4j的接口
参考文档: logging.apache.org/log4j/
使用配置xml