就是报错,就是不处理一下,程序运行到这里就直接终止了,输出报错信息。
但是我们用异常处理,能让他程序不停止不报错。
比如正常1/0程序肯定报错,用异常处理就不报错了。

参考文章:
https://blog.csdn.net/Code_shadow/article/details/81408145?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%BC%82%E5%B8%B8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-81408145.142v100pc_search_result_base9&spm=1018.2226.3001.4187
从字节码层面上来分析一下Java异常的实现原理,编写如下所示的源代码,使用javac命令进行编译,然后使用javap命令查看编译后的字节码细节内容。
public class ExceptionClassCode {public int demo() {int x;try {x = 1;return x;} catch (Exception e) {x = 2;return x;} finally {x = 3}}
}
public int demo();descriptor: ()Iflags: ACC_PUBLICCode:stack=1, locals=5, args_size=10: iconst_1 // 生成整数11: istore_1 // 将生成的整数1赋予第1号局部变量(x=1)2: iload_1 // 将x(=1)的值入栈3: istore_2 // 将栈顶的值(=1)赋予第2号变量(returnValue)4: iconst_3 // 生成整数35: istore_1 // x=36: iload_2 // returnValue=当前栈顶值(=1)7: ireturn // 返回returnValue(=1)8: astore_2 // 将Exception对象引用值赋予第2号局部变量9: iconst_2 // 生成整数210: istore_1 // x=211: iload_1 // x(=2)压入栈顶12: istore_3 // 将栈顶的值(=2)赋予第3号变量(returnValue)13: iconst_3 // 生成整数314: istore_1 // x=315: iload_3 // returnValue(=2)压入栈顶16: ireturn // 返回returnValue(=2)17: astore 4 // 将异常信息保存到第4号局部变量19: iconst_3 // 生成整数320: istore_1 // x=321: aload 4 // 将异常引用值压入栈23: athrow // 抛出栈顶所引用的异常Exception table:from to target type0 4 8 Class java/lang/Exception # 如果0~4行字节码(try代码块)中出现Exception及其子类异常,则执行第8行(catch代码行)0 4 17 any # 无论0~4行字节码(try代码块)是否抛出异常,都执行第17行(finally代码行)8 13 17 any # 无论8~13行字节码(catch代码块)是否抛出异常,都执行第17行(finally代码行)17 19 17 any
看到字节码中有一个Exception table(异常表)区域,这个就是与异常相关的字节码内容。它表示在from到to所指示的字节码行中,如果抛出type所对应的异常(及其子类),那么就跳到target指定的字节码行开始执行。