异常知识总结

news2024/9/20 16:11:50

就是报错,就是不处理一下,程序运行到这里就直接终止了,输出报错信息。
但是我们用异常处理,能让他程序不停止不报错。
比如正常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: ()I
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=5, args_size=1
         0: iconst_1 // 生成整数1
         1: istore_1 // 将生成的整数1赋予第1号局部变量(x=12: iload_1 // 将x(=1)的值入栈
         3: istore_2 // 将栈顶的值(=1)赋予第2号变量(returnValue)
         4: iconst_3 // 生成整数3
         5: istore_1 // x=3
         6: iload_2 // returnValue=当前栈顶值(=17: ireturn // 返回returnValue(=18: astore_2 // 将Exception对象引用值赋予第2号局部变量
         9: iconst_2 // 生成整数2
        10: istore_1 // x=2
        11: iload_1 // x(=2)压入栈顶
        12: istore_3 // 将栈顶的值(=2)赋予第3号变量(returnValue)
        13: iconst_3 // 生成整数3
        14: istore_1 // x=3
        15: iload_3  // returnValue(=2)压入栈顶
        16: ireturn  // 返回returnValue(=217: astore        4 // 将异常信息保存到第4号局部变量
        19: iconst_3 // 生成整数3
        20: istore_1 // x=3
        21: aload         4 // 将异常引用值压入栈
        23: athrow // 抛出栈顶所引用的异常
      Exception table:
         from    to  target type
             0     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指定的字节码行开始执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++笔记---二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: • 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值。 • 若它的右子树不为空,则右子树上所有结点的值都大于等于…

【CTF Reverse】XCTF GFSJ1092 easyEZbaby_app Writeup(Android+逆向工程+Java)

easyEZbaby_app 究极简单的安卓逆向 解法 得到一个 apk 安装包。 用 jadx 打开,搜索文本 flag,加载所有。 flag 是 obj obj2,来自用户的用户名和密码。 Override // android.view.View.OnClickListenerpublic void onClick(View view) {St…

看Threejs好玩示例,学习创新与技术(ProjectTexture合集)

本文是一个合集,稍微对ProjectTexture的技术进行总结,突出关键和创意。 演示视频如下(Playing with Texture Projection in Three.js | Codrops (tympanus.net)): 20240909_232959 1、它的创新与用途? 这个案例中模型方块游荡的方式像水波,鼠标放上面如棍子放在水里一样…

基于python+django+vue的旅游网站系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

网络(四)——HTTP协议

文章目录 认识urlurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 虽然应用层的协议是由人为规定的,但是已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用. HTTP(超文本传输协议)就是其中之一…

【PCB工艺】如何实现PCB板层间的互连

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言①、什么是通孔②、通孔是怎样产生的③、通孔种类④、盘中孔⑤、设计建议 前言 送给大学毕业后找不到奋斗方向的你…

AWS 将 OpenSearch 纳入 Linux 基金会旗下

AWS 今天宣布,随着OpenSearch 基金会的成立,它将把OpenSearch(流行的 Elasticsearch 搜索和分析引擎的开源分叉)移交给 Linux 基金会。在 Elastic 将其 Elasticsearch 和 Kibana 项目的许可证更改为自己的专有许可证 Elastic Lice…

力扣题解1184

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(简单): 公交站间的距离 环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distanc…

Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息

【需求】 使用Element Plus中的el-dialog默认是模态的(即它会阻止用户与对话框外部的元素进行交互),对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息,且对话框可拖动 【…

卷积——入门理解

一、卷积的通俗理解 卷积的意义——通俗易懂的理解(以吃馒头为例) 二、 卷积的深入理解 1、卷积能解决什么问题 可以用来计算拥有记忆系统的输出问题 无记忆:当前的输出仅取决于当前的输入,而与之前的输入无关 例如&#xff1…

SpringMVC1~~~

快速入门 spring容器文件 在src下就是applicationContext-mvc.xml&#xff0c;需要在web.xml指定<init-param>&#xff0c;给DispatcherServlet指定要去操作的spring容器文件 在WEB-INF下就是xxx-servlet.xml&#xff0c;不需要在web.xml指定<init-param>,如果我们…

Zookeeper工作机制和特点

1. Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a; 是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的 注册&#xff0c;一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知…

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…

基于Python DoIPClient库的DoIP上位机开发手顺

代码 address, announcement DoIPClient.await_vehicle_announcement()logical_address announcement.logical_addressip, port addressprint(ip, port, logical_address) 效果 代码 address, announcement DoIPClient.get_entity(ecu_ip_addresssIp, protocol_version3…

【VitualBox】VitualBox的网络模式+网络配置

VirtualBox 1. 简介 VirtualBox 是一款开源虚拟机软件&#xff0c;使用者可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系统作为客户端操作系统。 2. 六种网络接入模式 VirtualBox提供了多种网络接入模式&#xff0c;他们各有优缺点&#xf…

Setting Design Properties

设置设计属性 接下来&#xff0c;在设计上设置配置模式。这是导致物理 约束&#xff0c;在这种情况下是设计的属性&#xff0c;而不是单元的属性。首先&#xff0c;列出所有 当前设计的特性。 1.在Tcl控制台中列出设计的属性&#xff1a; list_property [current_design] 此命…

本地安装MySQL并配置环境变量

MySQL是一个关系型数据库管理系统&#xff0c;是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系数据库管理系统) 应用软件之一。 本地安装MySQL 提供了 MySQ…

mysql笔记8(多表查询)

文章目录 1. union联合查询可能会用到去重操作 2. inner join 内连接3. left join 左连接4. right join 右连接5. cross join 交叉连接6. natural join 自然连接natural left join 自然左连接natural right join 自然右连接自然连接的两张表没有同名字段怎么办&#xff1f; 7. …

LLMs之SWIFT:SWIFT的简介、安装和使用方法、案例应用之详细攻略

LLMs之SWIFT&#xff1a;SWIFT的简介、安装和使用方法、案例应用之详细攻略 目录 SWIFT的简介 新闻 &#x1f6e0;️ 安装 &#x1f680; 快速开始 Web-UI 训练 训练脚本 支持的训练过程 单卡训练 模型并行训练 数据并行训练 Deepspeed训练 多机多卡 阿里云-DLC多…

棋盘格角点检测-libcbdetect

libcbdetect libcbdetect 是一个用于自动子像素级别的棋盘格&#xff08;checkerboard&#xff09;、棋盘&#xff08;chessboard&#xff09;以及 Deltille 图案检测的库。它主要由 C 编写&#xff0c;旨在提供高精度、高鲁棒性的角点检测和图案组合功能&#xff0c;是一种基…