coreJava笔记05— —异常、断言、日志

在我们程序遇到错误的时候,我们总是会希望:
通知遇到的错误;
保存所有的工作;
允许用户妥善的退出;
在Java中遇到错误时,我们有异常处理机制去处理错误。并通过断言来有选择的检查。最后日志信息可以帮助我们备份,日后分析。

01异常
异常的分类:异常的对象都派生于一个Throwable类的一个实例。在其下一层分为error和exception两个分支。其中error错误描述了Jav运行时系统内部错误和资源耗尽,对此类错误除了终止程序外,我们几乎无能为力。
Exception又可以分为两大类RuntimeException和IOException。
前者包含了:错误的强制类型转换;数组访问越界;访问null指针。
后者则为程序本身没有问题,包括:试图超越文件末尾继续读取数据;试图打开一个不存在的文件;试图根据字符串查找class对象,而这个字符串表示的类根本不存在。
我们把派生于error和RuntimeException的错误称之为非检查型错误。其他的则称之为检查型。
声明检查型异常:抛出一个异常,即编写一个方法的时候,我们不仅要告诉编译器返回一个什么值,还要告诉编译器有可能发生什么错误。我们使用throws语句声明,以下四种是常见情况:
1.调用了一个抛出抛出检查型异常方法
2.检测到一个错误,抛出一个检查型异常
3.程序错误
4.Java虚拟机或运行时库出现内部错误
注意:子类覆盖了一个超类方法,子类声明的检查型异常不能比超类中的异常更通用。
创建异常类:自定义一个异常类,其包含一个默认的构造器和一个包含详细描述信息的构造器。

02捕获异常
即我们常见的try/catch语句块。
若try语句块中的任何代码抛出了catch中指定的一个异常类那么:
程序将跳过try语句块的其余代码;程序将执行catch中的处理器代码。
我们可以捕获多个异常,即使用多个catch。对不同类型的异常做出不同的处理。
finally子句:不管异常是否被捕获,finally语句中的代码都会执行。
分析堆栈轨迹:堆栈轨迹(stack trace)是程序执行过程中给某个特定点上所有挂起的方法调用一个列表。常用Throwable类的printStackTrace方法以及使用StackWalker类来进行。

03使用异常的技巧:
1.异常处理不能代替简单测试(可能会因处理异常花费更多的时间)
2.不要过分细化异常
3.充分利用异常层次结构
4.不要压制异常
5.在检查错误时,“苛刻”要比放任更好
6.不要羞于传递异常

04使用断言
断言机制即允许在测试期间向代码中插入一些检查,而在生产代码中会自动删除这些检查,有两种引入assert关键字的形式:
assert condition;
assert condition : expretion;
由于启用或者禁用断言是类加载器的功能。禁用断言时,类加载器会去除断言代码,因此不会降低程序运行效率。默认是禁用的。
何时应该使用断言:
断言失败时致命的、不可恢复的错误;
断言检查只是在开发和测试阶段打开;
所以断言应该只用于在测试阶段确定程序内部错误。

05日志
日志可以帮助我们记录有问题的代码,来观察程序行为。Java中的日志API可以很轻松的取消,禁止。并且可以定位到不同的处理器,且日志记录器和处理器都可以对记录进行过滤。此外,日志可以采用不同的方式格式化,应用程序可以使用多个日志记录器,并日志系统的配置会由相应的配置文件控制。
基本日志:使用全局日志记录器并调用info方法
高级日志:调用getLogger来创建。
七个日志级别:
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
实际在默认下只记录前三个,当然也可以自行设置。
过滤器:默认情况下,会根据日志的级别进行过滤,也可以通过实现Filter接口来定义一个过滤器。注意,同一时刻只能有一个过滤器。
日志技巧:
1.对简单应用,选择一个日志记录器
2.基于默认设置记录特性,根据自己的应用来设定一个更好的默认值。
3.对于自己想要的、有意义的内容设置为前三个级别,这些信息将被打印在控制台上。将想要的日志消息谁定位FINE级别也是一个很好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值