异常处理部分

news2024/11/26 16:46:02

文章目录

  • 一、异常概述及体系结构
    • 分类
      • Error
      • Exception
    • 异常的体系结构
    • 异常处理:抓抛模型
    • 异常处理机制一:try-catch-finally
      • finally的使用
    • 异常处理机制一:throws+异常类型
      • 如何选择两种方式
      • 手动生成异常对象
    • 如何定义自定义的异常类

一、异常概述及体系结构

异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

分类

Error

Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。
(基本上可以通过报错提示后面的后缀Error来判断)
在这里插入图片描述

Exception

其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。

异常的体系结构

java.lang.Throwable包括
①java.lang.Error:一般不进行针对性代码处理
②java.lang.Exception:可以进行异常的处理,又分为:
编译时异常(checked):IoException(FileNotFoundException等)、ClassNotFoundException
运行时异常(unchecked):NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、NumberFormatException、InputMisMatchException、ArithmeticException等

异常处理:抓抛模型

过程一:“抛”
程序在正常执行过程中,一旦出现异常,就会在异常代码处生成一个异常类的对象(每个异常都定义为一个类),并将对象抛出。一旦对象抛出,就不再执行其后的代码。
过程二:”抓“
可以理解为异常处理方式。分为两种:
try-catch-finally
throws

异常处理机制一:try-catch-finally

try{
	//可能出现异常的代码
}catch(异常类型1 变量名1){
	//处理异常的方式1
}catch(异常类型2 变量名2){
	//处理异常的方式2
}catch(异常类型3 变量名3){
	//处理异常的方式3
}
……
finally{
	//一定会执行的代码
}

说明:
1、finally是可选的
2、try将可能出现异常的代码包起来,在执行过程中,一旦出现异常,就会生成一个对应一场类的对象,根据此异常的类型,去catch进行匹配
3、一旦try中的异常类对象匹配到某一个catch时,就进入catch中进行异常处理。一旦处理完成,就跳出当前的try-catch结构(在没有写finally的情况下),继续执行其后的代码
4、catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下,无所谓;catch中的异常类型如果有子父类关系,则要求子类一定声明在父类上面,否则报错
5、常用的异常对象处理方式:
String类型返回值的getMessage(),返回的是异常信息
printStackTrace,打印堆栈信息
6、在try结构中声明的变量,在出了try结构后,不能被调用

使用try-catch-finally结构处理的是编译时异常,运行时仍可能报错。相当于将编译时出现的异常,延迟到运行时。
开发中,由于运行时异常比较常见,通常我们不对运行时异常编写try-catch-finally结构

try结构自动补全:整个选中后——右键——surround with——try catch block

7、可以嵌套

finally的使用

1、finally中声明的是一定会被执行的代码。即使 catch中又出现异常、try中有return语句、catch中有return语句等情况。
2、像数据库连接,输入输出流,网络编程Socket资源,JVM是不能自动回收的,需要我们手动进行释放。释放的语句就应该写在finally中。

异常处理机制一:throws+异常类型

1、throws+异常类型 声明在方法的声明处。指明方法执行时可能会抛出的异常类型。一旦方法体执行时出现异常,会在异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时,会被抛出。异常代码后的代码不会执行
在这里插入图片描述
2、try-catch-finally结构真正将异常处理掉了
throws只是将异常抛给方法的调用者,并没有真正处理

如何选择两种方式

1、如果父类中被重写的方法没有throws方式处理异常,则子类中也不能用throws处理。如果子类中有异常,需要使用try-catch-finally处理
2、执行的方法a中,如果有调用了几个其他的方法,且这几个方法有递进关系,建议使用throws进行异常处理,在方法a中可以使用try-catch-finally处理

手动生成异常对象

在这里插入图片描述
一般生成的对象会选择RunTimeException或Exception,因为Exception是包括编译异常的,所以如果创建的是Exception的异常对象,编译时会出错,还需要进行异常处理(throw或try-catch-finally)

如何定义自定义的异常类

1、继承与现有的异常结构:RunTimeException或Exception
2、提供一个全局常量:serialVersionUID
3、提供重载的构造器

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

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

相关文章

JVM学习- - -虚拟机栈详解

前言:今天学长带领大家走进JVM学习,让我们一起来学习认识虚拟机栈吧~ 目录 1 虚拟机栈概述 虚拟机栈出现的背景 初步印象 内存中的栈和堆 虚拟机栈基本内容 栈的优点 2 栈的存储单位 栈中存储什么? 栈运行原理 栈帧的内部结构 3 局…

【云原生】k8s之存储卷

内容预知 前言 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 4. PVC 和 PV的静态存储卷 4.1 pv和pvc的介绍 4.2 pvc 和pv的创建过程及销毁过程 4.3 对pv的操作指导 4.4 静态创建pv和pvc资源由pod运用过程 步骤一:在NFS主机上创建共享目录,…

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

因工作需要,需要将目标检测模型 部署在开发板上。在走了很多弯路后 找到一个成功的案例并记载下来 这里说一下我现有的硬件设备 。 我是购买的RADXA的rock3a开发板 搭载的soc是rk3568 这是开发板的正面图,因为瑞芯微针对计算机视觉中的目标检测模型有一…

Java IO流 - 缓冲流的详细使用介绍

文章目录缓冲流缓冲流概述字节缓冲流字符缓存流缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能 缓冲流分为: 字节缓存输入流、字节…

做个测试工具

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

uniapp中引入vant Weapp

Vant Weapp官:https://vant-contrib.gitee.io/vant-weapp/#/home 步骤一:下载vant组件插件 从github上下载该插件https://github.com/youzan/vant-weapp 只要这个dist文件夹,把dist重命名为vant; 步骤二: 与pages…

301-295- 至少有 K 个重复字符的最长子串-0105

题解 本题使用分治策略,如果某个字符的出现次数小于k,则用它将数组分开,再把每个子数组组委参数递归执行.如果都大于k,则将该字符串的长度返回. 用一个字符分割,往深了分割各子字符串,这个字符分割完成,使用另一个字符进行分割,而不是一次用多个字符进行分割.这个题递归有些绕…

电脑怎么重装系统?小白也能轻松掌握这些方法

重新安装计算机系统有两种原因:一种是计算机系统可以正常使用,但是电脑比较卡,为了提高它的运行速度,所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失,系统出现蓝屏,或…

MQ概念简介

队列管理器 队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。 2) 消息 在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的理解,比如:用户的各种类…

机器学习100天(二十九):029 K折交叉验证

机器学习100天,今天讲的是:K 折交叉验证! 《机器学习100天》完整目录:目录 机器学习中,我们常会遇到一个问题,就是超参数的选择,超参数就是机器学习算法中的调优参数,比如上一节 K 近邻算法中的 K 值。K 折交叉验证就是帮助我们选择最优的超参数。 首先,介绍一下简…

FPGA并行计算可编程芯片

玩转Zynq可以使用Vivado创建一个FPGA工程。什么是FPGA前言自FPGA诞生以来,FPGA(现场可编程门阵列)就引起了人们的关注。在1980年代中期,Ross Freeman和他的同事从Zilog购买了该技术,并创建了Xilinx,目标是A…

基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统

基于JavaSpringBootvuenode.js实现自行车租赁平台管理系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSp…

netmap: UDP 协议栈的实现

文章目录1、获取以太网数据1.1、netmap 原理1.2、netmap 环境搭建2、udp 协议栈的实现2.1、以太网帧2.2、ip 协议2.3、udp 协议2.4、问题分析3、ARP 协议的实现4、icmp 协议的实现5、netmap 代码实现1、获取以太网数据 自定义协议栈,需要获取原始的以太网数据&…

第50问:从连接判断应用访问数据库的异常行为

问 我发现应用有一根访问数据库的连接有异常流量,如何判断是应用哪个逻辑导致了异常行为 实验 先起锅烧一个数据库实例: 我们用 mysqlslap 作为应用: 假设在 MySQL 中,我们认为这根连接有异常流量: 通过 ss 找到这根…

阿里一面 | 说说你对 MySQL 死锁的理解

1、什么是死锁? 死锁指的是在两个或两个以上不同的进程或线程中,由于存在共同资源的竞争或进程(或线程)间的通讯而导致各个线程间相互挂起等待,如果没有外力作用,最终会引发整个系统崩溃。 2、Mysql出现死…

cordova-Toast的使用 -官方插件和自定义插件

前言:cordova是使用前端技术来开发app,可以节省成本和快速发布。不需要了解原生app开发 加载web的方式,可以兼容生成Android、ios以及浏览器等各种平台的项目 前文:cordova开发流程 一、官方提示浮动框 cordova-plugin-x-toast 1.cordova pl…

二、GtkApplication and GtkApplicationWindow

1 GtkApplication 1.1 GtkApplication and g_application_run 人们编写编程代码来开发应用程序。什么是应用程序?应用程序是使用库运行的软件,其中包括操作系统、框架等。在GTK 4编程中,GTK应用程序是使用GTK库运行的程序(或可执行程序)。 编写GtkAp…

屏幕录制有快捷键吗?录屏快捷键ctrl加什么

我们日常使用的电脑是自带录屏功能,可以方便我们将玩游戏的精彩画面,或者是电影某个片段给录制下来。为了不错过这些精彩片段,可以使用录屏快捷键录制。那电脑录屏快捷键ctrl加什么?今天本文就简单地给大家介绍电脑录屏快捷键&…

【错误记录】IntelliJ IDEA 编译 Java 文件报错 ( 错误: 非法字符: ‘\ufeff‘ )

文章目录一、报错信息二、修改方案一、报错信息 报错信息 : D:\002_Project\003_Java_Work\Xxx\src\main\java\cn\Xxx.java:1: 错误: 非法字符: \ufeff package xxx;出现该问题的原因是 IntelliJ IDEA 在创建文件时 , 为文件添加了 BOM 隐藏字符 , 这是 文件的 字…

(七)汇编语言——更灵活的定位内存地址的方法

目录 and和or ASCII码 [bxidata] SI和DI寄存器 [bxsi]和[bxdi] [bxsiidata]和[bxdiidata] 总结 例子(双重循环的解决方案) 我们知道,对于汇编来说,内存是极为重要的,所以,能精准且巧妙地定位内存地…