java异常与日志

最近在看java核心技术卷1的异常部分,在此记录一下自己的学习收获。

在java中,给出三种处理错误的机制:

  1. 抛出异常
  2. 日式
  3. 使用断言

异常

image

runtimeException : 程序错误导致的异常;
IOException: 程序本身没有问题,但由于像io错误之类导致的异常
error:Java系统内部错误或资源耗尽

非受检异常:派生于error类或runtimeException类
受检异常: 派生于IOexception类

两种情况下应该抛出异常:

调用一个抛出受检异常
程序运行是发生了错误,并通过throw抛出异常

总结:一个方法必须声明所有可能抛出的受检异常,而非受检异常error不可控制,RunTimeException,应该避免,你需要在运行期间发生RunTimeException

自定义异常

定义一个派生于Exception的类或exception子类的类,一般包含包含两个构造函数,一个默认的构造函数,另一个带有描述信息的构造函数

1
2
3
4
5
6
7
8
9
try {
try {
might throw exception
}finally {
i.close();
}
}catch (Exception e) {
show error message
}

内层try语句确保关闭输入流,外层try语句报告异常,还可以报告finally中的错误

日志

static private Logger logger = Logger.getLogger(ApplyServiceTest.class.getName());

未被任何变量引用的日志记录器可能被垃圾回收,未了防止发生设置为静态变量

logger的等级:
Logger类是用来记录 某个级别的日志消息:
  级别共分为以下几类,从上倒下,级别依次下降:
    SEVERE(严重)——级别最高
    WARNING(警告)
    INFO
    CONFIG
    FINE
    FINER
    FINEST———最低值

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

可以自已配置日志的显示等级,参考如下博客

在SPRINGMVC中配置LOG4J日志

断言

关于断言自己学的不是很明白,在这里简单的写一下,以后学明白了再做补充

在java核心卷中提到过,什么时候可以使用断言?

  1. 断言的失败是致命的,不可恢复的错误
  2. 断言的使用只能用于开发和测试阶段(靠近海岸时穿上救生衣,但在海中央时就把救生衣丢掉吧)

断言只因该再测试阶段判断错误位置。

推荐文章