JAVA2核心技术卷I:基础知识(原书第7版) -- 第11章. 异常与调试

来源:互联网 发布:servlet接收数据原理 编辑:程序博客网 时间:2024/05/22 05:14

1. 异常分类

    所有的异常派生于Throwable

    1.1 Error: 系统内部错误或者资源耗尽

    1.2 Exception

        1.2.1 RuntimeException: 类型转化错误、数组越界、访问空指针

        1.2.2 其他异常: IOException等

    1.3 RuntimeException和Error为未检查异常、其他称为已检查异常

2. 声明异常

    public FileInputStream(String name) throws FileNotFoundException

    子类throws的异常不能超过父类

3. 捕获异常

    try{} catch(){}

4. 捕获并再次抛出异常

    try{

        access the database

    } catch(SQLException e) {

        Throwable se = new ServletException("database error");

        se.setCause(e);

        throw se;

    }

5. finally语句始终都会执行,如果try和finally中都存在return语句,那么最终返回finally中的return

6. 堆栈跟踪

    6.1 在JDK1.4之前,使用printStackTrace方法

    6.2 在JDK1.4及之后,使用StackTraceElement对象数组

        Throwable t = new Throwable();

        StackTraceElement[] frames = t.getStackTrace();

        for (StackTraceElement frame : frames) {print something;}

7. 断言: 断言机制允许在测试期间向代码中插入一些检查语句,当代码发布,插入的检测语句将会自动移走

    7.1 assert x >= 0; 检查是否为非负数 或者 assert x >=0 : x; 将x的实际值传递给AssertionError对象,在后面显示出来

    7.2 启动断言: java -enableassertions MyApp 或者 java -ea MyApp

8. Java调试技巧

    8.1 -verbose: 运行Java虚拟机,观察类的加载过程

    8.2 javac -Xlint 对一些普遍代码问题进行检查

    8.3 监控应用程序,查看内存消耗、线程使用、类加载情况

        java -Dcom.sun.management.jmxremote MyProgram.java    // 启动虚拟机

        jconsole processID // 运行jconsole,在Win下,使用任务管理器查看processID,linux下使用ps查看