Java中的异常传播机制


Java中的异常传播机制

转载自:Java中的异常传播

讲述java中底层异常的类型以及如何进行处理

为了方便讲解,这里我准备了一小段异常示例代码,如下所示:


public class ExceptionTest {
    static int remainder(int dividend, int divisor) throws DiviByZeroException {
        try {
            return dividend % divisor;
        } catch (Exception e) {
            throw new DiviByZeroException();
        }
    }

    public static void main(String[] args) throws DiviByZeroException {
        int result = remainder(10, 0);
        System.out.println(result);
    }
}

public class DiviByZeroException extends Exception {
}

上述代码中,我们声明了一个remainder函数,它接收两个int类型参数,dividend参数表示被除数,divisor参数表示除数,函数里面返回dividend/divisor的计算结果,其实就是一个求余数的过程。我们都知道这里可能会抛出除以零的异常,这里我们捕获了ArithmeticException异常,然后将ArithmeticException这个运行时异常转化成DivideByZeroException检查性异常,最后抛出这个检查性异常。这里DivideByZeroException是我们自定义的异常,它继承自Exception,故它是一个检查性异常。

然后我们需要通过javac命令对这个ExceptionTest测试类进行编译以获取到它的class字节码文件,这里就不演示了,我想大家都会。有了字节码文件,下一步我们需要查看它的字节码内容,这里我们可以通过javap命令来查看,具体操作命令如下所示:

javap -c -v -l ExceptionTest.class

然后在命令行窗口里就会返回我们想要的字节码内容,如下图所示:

td0Rbj.png

不过,这里我推荐你使用JBE(Java Bytecode Editor即Java字节码编辑器)工具,因为它使用起来更方便。JBE的下载地址如下所示:

(PS:我用的是Idea中的Show Bytecode)


  TOC