Java疯狂讲义读书笔记第十章

版权声明:随意转载 https://blog.csdn.net/bigcupwater/article/details/76195096
  1. Java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字,try里面放置可能引发异常的代码块,catch后对应异常处理的一个代码块,finally主用于回收在try里打开的物理资源,异常机制保证finall一定会被执行。throws用于方法签名中,声明该方法可能抛出的异常,throw用于抛出一个实际的异常。

    只要执行代码出现了异常,系统就会自动生成一个异常对象,如果没有为这个异常定义cache块,程序就在此退出。

  2. 抛出异常:执行try里代码出现异常,系统自动生成一个异常对象,该对象提交到运行时环境的过程。

  3. 捕获异常:Java运行时环境收到异常后,寻找处理该异常的catch块,找到后交给catch处理的过程。父类异常的cache块应该在子异常后。
  4. Java把所有非正常情况分为两种:异常(Exception)和错误(Error)。他们都继承父类Throwable。

    IndexOutOfBoundsException // 数组越界异常
    NumberFormatException     // 数字格式化转换异常,输入的不是数字字符串
    ArithmeticException       // 算术异常,比如除0异常
    NullPointerException      // 空指针异常,引用变量没有值
    
  5. Java7提供多异常捕捉机制,一个catch可以响应多个异常,多个异常之间用 | 隔开,捕捉多个异常时,异常变量为隐式的final,所以不能重新赋值。
  6. 访问异常信息,访问cache块中异常对象的相关信息,通过访问cache块后异常形参获得。

    getMessage();                    // 返回描述异常的字符串
    printStackTrace();               // 将该异常的跟踪栈信息输出到标准错误输出
    printStackTrace(PrintStream s);  // 将该异常的跟踪栈信息输出到指定输出流
    getStackTrace();                 // 返回该异常的跟踪栈信息
    
  7. 程序在try里打开了一些物理资源,这些物理资源都必须显示回收。finally块用于回收在try里打开的物理资源。
  8. Java的垃圾回收不会回收任何物理资源,只能回收堆内存中对象所占用的内存。
  9. 不管是否try是否引发异常,cache是否被执行,除非在try、catch块中退出虚拟机(return也会执行finally),否则finally总是会被执行。
  10. Java7提供自动关闭资源的try,在try后紧跟一对圆括号,括号里声明、初始化一个或多个资源(这些资源类必须实现AutoCloseable或Closeable接口,必须实现close()方法)。try语句在该语句结束时自动关闭这些资源。
  11. Java的异常分为两大类,Checked和Runtime异常。Checked异常在程序编译时就会发生错误,无法通过编译。
  12. 如果当前方法不知道如何处理方法本身会引发的异常,则使用throws 声明 抛出。让上一级调用者处理。若main方法也无法处理则抛出给JVM虚拟机,虚拟机会打印异常的跟踪栈信息,并终止程序运行。
  13. 方法一旦使用throws抛出,本身就不需要使用try…catch来捕获了。在调用该方法时,要么放在try中捕获,要么放在另一个带throws声明抛出的方法中。

    1. 对于程序中的Checked异常,Java要求必须显式捕获并处理该异常,或者显式声明抛出该异常。
    2. 如果早方法中显示声明抛出Checked异常,将会导致方法签名与异常耦合,如果该方法是重写父类的方法,则该方法抛出的异常还会受到被重写方法抛出的异常限制。
  14. 在程序中自行抛出异常,使用throw。

    throw与throws的比较

    1. throws出现在方法函数头;而throw出现在函数体。
    2. throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
    3. 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
  15. 自定义异常,继承Exception。

public class MyException extends Exception{
    public MyException(String msg){
        super(msg);
    }
}

常见异常类继承关系图

猜你喜欢

转载自blog.csdn.net/bigcupwater/article/details/76195096