当前位置: 首页> 游戏> 单机 > 异常知识总结

异常知识总结

时间:2025/7/13 13:40:46来源:https://blog.csdn.net/benpaodeDD/article/details/142298544 浏览次数:0次

就是报错,就是不处理一下,程序运行到这里就直接终止了,输出报错信息。
但是我们用异常处理,能让他程序不停止不报错。
比如正常1/0程序肯定报错,用异常处理就不报错了。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/76341582b37a4ebea7c4d6fdf9b6c874.png在这里插入图片描述

处理异常:抛出,捕获。
finally:程序出不出异常都会执行finally里面的内容。

在这里插入图片描述

捕获

举例:
在这里插入图片描述
异常处理后:
在这里插入图片描述
catch里面的参数:想要捕获的异常类型。
最高throwable,捕获了他,他下面所有异常都可以捕获到。

catch可以层层递进:是哪个异常走哪个。
!!!注意:要捕获多个异常,一定从上到下范围从小到大,不然代码会报错。
在这里插入图片描述

快捷键

选中要捕获的代码,ctrl+alt+t
在这里插入图片描述

打印栈信息:

打印的就是不处理时候的报错内容
在这里插入图片描述
源码:
会打印:
在这里插入图片描述

抛出

throw, throws
都是用在方法里。
如果是throws,调用方法的地方来处理。
在这里插入图片描述

自定义异常

内置的异常可能不够用。但是一般都不需要。

!!异常实现原理(字节码级别)

参考文章:
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=12: iload_1 // 将x(=1)的值入栈3: istore_2 // 将栈顶的值(=1)赋予第2号变量(returnValue)4: iconst_3 // 生成整数35: istore_1 // x=36: iload_2 // returnValue=当前栈顶值(=17: ireturn // 返回returnValue(=18: 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(=217: 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指定的字节码行开始执行。

关键字:异常知识总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: