Java中异常处理方式

文章目录

  • 针对异常的处理主要有两种方式:
    • 1.抛出异常
    • 2.try catch 捕获异常
  • 三道经典异常处理代码题


针对异常的处理主要有两种方式:

1.抛出异常

遇到异常不进行具体处理,而是继续抛给调用者(throw,throws)抛出异常有三种形式,一是 throw,一个 throws,还有一种系统自动抛异常。throws 用在方法上,后面跟的是异常类,可以跟多个;而 throw 用在方法内,后面跟的是异常对象。

2.try catch 捕获异常

在catch语句块中补货发生的异常,并进行处理。
Java中异常处理方式_第1张图片
try-catch捕获异常的时候还可以选择加上finally语句块,finally语句块不管程序是否正常执行,最终它都会必然执行。

三道经典异常处理代码题

1.题目一

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        try {
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            System.out.print("3");
        }
    }
}

执行结果:31
try、catch。finally 的基础用法,在 return 前会先执行 finally 语句块,所以是先输出finally 里的 3,再输出 return 的1。

2.题目二

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        try {
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            return 3;
        }
    }
}

执行结果:3
try 返回前先执行 finally,结果 finally里不按套路出牌,直接 return 了,自然也就走不到 try 里面的 return 了。finally 里面使用 return 仅存在于面试题中,实际开发这么写要挨吊的

3.题目三

public class TryDemo {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static int test(){
        int i = 0;
        try {
            i = 2;
            return i;
        }finally {
           i = 3;
        }
    }
}

执行结果:2
大家可能会以为结果应该是 3,因为在 return 前会执行 finally,而 i 在 finally 中被修改为 3 了,那最终返回 i 不是应该为 3 吗?
但其实,在执行 finally 之前,JVM 会先将 i 的结果暂存起来,然后 finally 执行完毕后,会返回之前暂存的结果,而不是返回 i,所以即使 i 已经被修改为 3,最终返回的还是之前暂存起来的结果 2。

你可能感兴趣的:(java基础,java,jvm,开发语言)