• 《Java核心技术 卷I》读书笔记六


    章节内容

    • 处理错误
    • 捕获异常
    • 使用异常机制的技巧
    • 使用断言
    • 记录日志
    • 调试技巧

    处理错误

    异常分类

    在java中,异常对象都是派生于Throwable类的一个实例。
    所有的异常分为Error和Exception
    Error类层级结构描述了Java运行时系统的内部错误和资源耗尽错误
    Exception又被分成RuntimeException和IOException
    “如果出现RuntimeException异常,那么就一定是你的问题”这是一条有道理的准则
    Java规范将派生于Error类或RuntimeException类的所有异常称为非受查异常,所有其他的异常称为受查异常。

    捕获异常

    如果某个异常发生的时候没有在任何地方捕获,程序就回终止,并在控制台打印出异常信息。要想捕获一个异常,必须设置try/catch语句块
    如果调用了一个抛出受查异常的方法,就必须对它进行处理或者继续传递
    不允许在子类的throws说明符中出现超过超类方法说列出的异常范围
    不管是否有异常被捕获,finally子句中的代码都被执行
    资源的异常处理一般比较难处理,如果资源属于一个实现了AutoCloseable接口的类,Java7为这种提供了很快捷方便的异常处理机制:

    try(Resource r = ...) {
    }
    

    try块退出后,自动调用r.close()方法,该方法属于AutoCloseable接口
    可以调用Throwable类的printStackTrack方法访问堆栈轨迹的文本描述信息
    另一种更灵活的方式是通过处理getStackTrace方法得到的StackTraceElement对象数组来分析异常
    静态的Thread.getAllStackTrace方法可以产生所有线程的堆栈轨迹

    使用异常机制的技巧

    1. 异常处理不能代替简单的测试

    判断一个栈是否为空再处理比直接pop再去try{}catch{}处理异常来的快

    1. 不过过分地细化异常
    2. 利用异常层级结构
    3. 不要压制异常
    4. 在检测错误时,苛刻比放任更好
    5. 不要羞于传递异常

    使用断言

    断言的两种形式:

    assert object != null;
    assert object != nul : object;
    

    两种形式都会对条件进行检测,如果结果为false,则抛出一个AssertionError异常。
    在第二种形式中,表达式将被传入AssertError的构造器,并转换成一个消息字符串
    默认情况下,断言被禁用,可以在运行程序时用-ea选项启用,禁用为-da

    java -ea MyApp
    有些类不是由类加载器加载,而是直接由虚拟机加载
    断言只应该用于在测试阶段确定程序内部的错误位置

  • 相关阅读:
    MFC中DoDataExchange()的作用
    图片下面出现空白像素的问题解决
    nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行
    配置 PHP 的 Session 存储到 Redis
    redis4安装
    jumpserver安装
    mysql命令参数详解
    定制LNMP的RPM包
    NTP原理
    内网环境NTP服务及时间同步(CentOS6.x)配置和部署
  • 原文地址:https://www.cnblogs.com/prelude1214/p/13812335.html
Copyright © 2020-2023  润新知