最近在看java核心技术卷1的异常部分,在此记录一下自己的学习收获。
在java中,给出三种处理错误的机制:
- 抛出异常
- 日式
- 使用断言
异常
runtimeException
: 程序错误导致的异常;IOException
: 程序本身没有问题,但由于像io错误之类导致的异常error
:Java系统内部错误或资源耗尽
非受检异常:派生于error类或runtimeException类
受检异常: 派生于IOexception类
两种情况下应该抛出异常:
调用一个抛出受检异常
程序运行是发生了错误,并通过throw抛出异常
总结:一个方法必须声明所有可能抛出的受检异常,而非受检异常error不可控制,RunTimeException,应该避免,你需要在运行期间发生RunTimeException
自定义异常
定义一个派生于Exception的类或exception子类的类,一般包含包含两个构造函数,一个默认的构造函数,另一个带有描述信息的构造函数
1 | try { |
内层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。
可以自已配置日志的显示等级,参考如下博客
断言
关于断言自己学的不是很明白,在这里简单的写一下,以后学明白了再做补充
在java核心卷中提到过,什么时候可以使用断言?
- 断言的失败是致命的,不可恢复的错误
- 断言的使用只能用于开发和测试阶段(靠近海岸时穿上救生衣,但在海中央时就把救生衣丢掉吧)
断言只因该再测试阶段判断错误位置。