Java核心技术笔记-第11章

异常,断言,日志和调试

1.异常
(1)Exception和Error(内部错误)继承自Throwable,而Exception又派生出IOException和RuntimeException(开发者编写的程序出现的错误都属于这类)。其中派生于Error和RuntimeException属于未检查异常,派生于IOException属于已检查异常。只有已检查异常才需要在方法定义的后面添加throws xxException,以告诉使用该方法的程序员可能抛出的异常。
(2)子类方法中声明的已检查异常不能比超类方法声明的异常更通用。也就是说子类声明的异常只能更加详细。如果超类没有声明异常,那么子类也不能声明异常。
(3)在创建异常类时,应该包含两个构造方法,一个是默认的空的,另一个带有一个String类型的参数(用来描述异常),并调用super(String …)。
(4)捕获多个异常:try{…} catch(…){…} catch(…){…} catch(…){…}(要求:捕获的异常之间没有子类关系)
(5)再次抛出异常:

try
{
    //DB opereation
} 
catch(SQLException e)
{
    Throwable se = new ServletException("database error");
    se.initCause(e);    //设置se异常产生的原因,以便以后可以使用se.getCause()
    throw se;
}

(6)try/catch try/finally try/catch/finally
(7)如果try和finally块中都有return 语句,那么finally的return值会覆盖try块return的值。
(8)带资源的try块:需要实现AutoCloseable的close方法,然后资源就可以自动被关闭。如:

try(Scanner in = new Scanner(...), PrintWriter out = new PrintWriter(...))  //可以定义多个资源
{
    //opereation
}

在try块正常结束,或者抛出一个异常时,in和out都会自动被关闭,而且,如果close方法也抛出异常,则会被 自动捕获。(这样就解决了在finally块中执行close方法时也有可能抛出异常的问题)

2.断言(默认情况下,断言是被禁用的):允许在测试期间向代码插入一些检查语句,代码发布时,这些检查语句将会被自动移走。
assert x>=0; 或者assert x>=0 : “x是否大于0”;(也可以assert x>=0:x; 这里的x会被自动转换为字符串)
如果不满足x>=0,则会抛出一个AssertionError异常,并会将冒号后面的变量传递给AssertionError的构造函数,并将该变量转换为一个字符串。但是AssertionError并不存储该值,只是一个消息字符串,不可能在以后得到它。
(1)断言失败程序就会退出。不应该作为程序向用户通告问题的手段。
(2)断言只用于开发和测试阶段。只用于确定程序内部的错误位置。
注意:断言用来捕捉 程序员自己 的错误,而异常用来捕捉用户和系统的错误。不要使用断言修改任何的逻辑。

3.日志
(1)基本日志:Logger.getGlobal().info(“描述信息”);
Logger.getGlobal().setLevel(Level.OFF);//取消所有的日志
(2)高级日志
[1]创建或者检索记录器:private static final Logger myLogger = Logger.getLogger(“com.mycompany.myapp”);
[2]默认只记录SEVERE,WARNING,INFO级别的日志,也可以用setLevel方法设置级别最低级别(设置之后从该级别到最后级别都会被记录)。
[3]对于所有的级别有下面两种记录方法:logger.warning(message); logger.fine(message);
[4]可以使用throwing或log方法记录不可预料的异常。
(3)一个要被记录的日志级别,必须高于日志记录器和处理器的级别,才会被记录。(与(2)中[2]矛盾?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值