Java面试复习——异常处理

Java面试准备——异常处理

本文学习自GitHub上的JavaGuide项目,感谢大佬的资源,此处为自我学习与整理,原项目链接 JavaGuide

Java异常类层次结构图

Java面试复习——异常处理_第1张图片

  1. Java中所有的异常都有一个祖先java.lang.Throwable。Throwable有两个重要子类Error和Exception。
  2. Error表示程序无法处理的错误,是运行时较为严重的问题。大多数错误于代码编写者的执行无关,而是运行JVM时出现的错误。比如JVM运行操作时内存不够用了,会出现OutOfMemoryError。这些错误出现时JVM一般会终止线程。
  3. Exception是程序本身可以处理的异常。RuntimeException由JVM抛出,NullPointerException是要访问的变量没有引用对象,ArithmeticException是算术运算异常,ArrayIndexOutOfBoundaryException下标越界。
  4. 异常可以处理,错误不能处理

Throwable类常用方法

  1. public String getMessage() 返回异常发生时的简要描述
  2. public String toString() 返回异常发生时的详细信息
  3. public String getLocalizedMessage() 返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以生成本地化信息。如果没有覆盖方法,和getMessage()返回结果相同。
  4. public void printStackTrace() 在console上打印Throwable对象封装的异常信息

try,catch,finally

  1. try块用于捕捉异常,后面可以有零个或者多个catch块,如果是零个,必须接finally块
  2. catch块用于处理try中捕获的异常
  3. finally块无论是否捕获和处理异常都会执行,如果try和catch中会return,则finally在return之前执行。
  4. 在以下情况,finally不会被执行:
    (1) CPU关闭
    (2)进程死亡
    (3)finally块的第一行发生异常
    (4)前面的代码中调用了System.exit(int),并且在异常语句之前
  5. finally会在try和catch的return之前执行,并且如果finally有return,则会覆盖别的return。
    代码示例:
public class test {
    public static int test(int i){
        try{
            int res = 10/i;
            return res;
        }catch (Exception e){
            e.printStackTrace();
            return i++;
        }
        finally {
            i=100;
            return i;
        }
    }
    public static void main(String[] args) {
        int res=test(0);
        System.out.println(res);
    }
}

输入为0时:
Java面试复习——异常处理_第2张图片
输入为1时输出仍为100,原因是finally的return覆盖了try和catch的return。

你可能感兴趣的:(Java面试复习——异常处理)