Java学习 异常,断言和日志(二)

总之,一个方法必须声明所有的受查异常,而非受查异常要么不可控制,要么就应该避免发生。

对于已经存在是异常类:

1)找到一个合适的异常类

2)创建这个类的一个对象

3)将对象抛出

一旦抛出了异常,这个方法就不可能返回到调用者。也就是说,不必为返回的默认值或错误代码担忧

对于子类覆盖父类含有异常方法的解释

解释:定义了一个父类People类,以及其三个子类Children, Adults, Olds. 假设在父类中有一个冷空气事件,那么它就会抛出一个Sick类型的异常。但是由于三个子类的抵抗疾病的能力不同,那么Adults类由于抵抗力较强,其方法可能不抛出异常。而Children和Adults类型,由于抵抗力较弱,可能抛出Sick类型的不同子类型。但是需要注意的是,子类不能抛出与Sick类完全不相关的异常类型,例如身高Height类型。因为必须把父类作为一个大前提,其子类不能抛出比父类异常更加出格的异常,否则无法进行识别。

1,捕获异常

通过try catch语句,捕获异常

1.2 捕获多个异常

eg,catch(FileFoundException | UnkeownHostException e){...}

注意:捕获多个异常时,异常变量默认为final类型

1.3 再次抛出异常和异常链

在catch语句中可以抛出一个异常,目的是为了改变异常的类型

可以将原始异常作为新异常的原因,例如:

try
        {
            //access the database

        }
        catch (SQLException e)
        {
            Throwable se = new ServletException("database error");
            se.initCause(e);
            throw se;
        }

通过这种包装技术,可以使得用户抛出子系统的高级异常,而不会丢失原始异常的细节

1.3 finally 子句

为了恰当的解决产生资源回收问题

不管异常是否产生,finally都将会被执行

为了防止catch语句继续抛出时没有执行finally语句,建议将try/finally 和 try/catch 两种语句进行耦合,例如:

InputStream in = ...;
try
{
    try
    {
        code that might throw exception
    }
    finally
    {
        in.close();
    }
}
catch (IOException e)
{
    show error message
}

值得注意的是,finally中语句也有可能会出现异常,当出现这种情况时,原始的异常将会丢失,转而抛出新的异常

1.4 带资源的try语句

带资源的try语句可以处理好异常覆盖的情况,原来的异常会重新抛出,而close方法抛出来的异常会被 “ 抑制 ” 。这些异常会被自动捕获,并由addSuppressed方法增加到原来的异常。若果对这些感兴趣可以调用getSupprssed方法,它会得到从close方法抛出并被抑制的异常列表。

早抛出,晚捕获

断言

断言机制允许在测试机制期间向代码插入检查语句,当发布代码时,将插入的检测语句自动移走

引入关键字:assert

其有两种形式:

 1) assert 条件;

 2) assert 条件 :表达式;

两种形式都会对条件进行检测,如果结果为false,就会抛出一个AssertionError异常。在第二中形式中,表达式将会被传入一个AssertionError构造器,并将其转化成一个消息字符串。

 

、注:调试技巧 P304。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值