异常的顶级理解
目录
1.异常的概念与体系结构
1.1异常的体系结构
1.2异常的举例
1.3错误的举例
2.异常的分类
2.1编译时异常
2.2运行时异常
3.异常的处理
3.1异常的抛出throw
3.2try-catch捕获并处理
3.3finally
3.4 异常声明throws
4.自定义异常类
1.异常的概念与体系结构
1.1异常的体系结构

从上图中可以看到:
1. Throwable : 是异常体系的顶层类,其派生出两个重要的子类 , Error 和 Exception2. Error : 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等 ,典型代表: StackOverflflowError 和 OutOfMemoryError ,一旦发生回力乏术。3. Exception : 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说 的异常就是Exception 。
1.2异常的举例
public static void main(String[] args) {System.out.println(10/0);} 运行结果及分析:

补充:
(2)数组越界异常
public static void main(String[] args) {int[] arr = {1, 2, 3,4,5};System.out.println(arr[10]);}
public static void main(String[] args) {int[] arr = null;System.out.println(arr.length);} 1.3错误的举例
StackOverflflowError
public class Text2 {public static void fun(){fun();}public static void main(String[] args) {fun();}
} 执行结果:

2.异常的分类
2.1编译时异常
理解:
正确完整代码:
public class Text3 {public static void main(String[] args) throws CloneNotSupportedException {Person p1 = new Person(18, "WH");Person p2= (Person) p1.clone();}
}
public class Person {int age;String nume;public Person(int age, String nume) {this.age = age;this.nume = nume;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
2.2运行时异常
3.异常的处理
在Java中,异常处理主要的5个关键字:try、catch、final、throw、throws。
3.1异常的抛出throw
throw new XXXException ( " 异常产生的原因 " )
运行结果:
Exception in thread "main" java.lang.NullPointerException: hahaha
(1) throw 必须写在方法体内部(2)抛出的对象必须是 Exception 或者 Exception 的子类对象(3) 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处 理, 直接交给JVM来处理(4)如果抛出的是编译时异常,用户必须处理,否则无法通过编译(5)异常一旦抛出,其后的代码就不会执行
对于(3)(5)举例:

3.2try-catch捕获并处理
语法形式:

public static void main(String[] args) {try{System.out.println(10/0);System.out.println(100);}catch (ArithmeticException e){e.printStackTrace();}} 运行结果:
java.lang.ArithmeticException: / by zero
(2)如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的
public static void main(String[] args) {try {System.out.println(10/0);} catch (NullPointerException e) {System.out.println(10);}} 运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
(4)如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误
(5)可以通过一个catch捕获所有的异常,即多个异常,一次捕获(不推荐)
3.3finally
finally 执行的时机是在方法返回之前 (try 或者 catch 中如果有 return 会在这个 return 之前执行 fifinally). 但是如果 finally 中也存在 return 语句 , 那么就会执行 fifinally 中的 return, 从而不会执行到 try 中原有的 return.一般我们不建议在 finally 中写 return ( 被编译器当做一个警告 )

3.4 异常声明throws
语法格式:
修饰符 返回值类型 方法名 ( 参数列表 ) throws 异常类型 1 ,异常类型 2 ...{}注意:
如果方法是main方法调用者仍然可以不处理异常,借助throws将异常抛 给JVM来处理。
1. throws 必须跟在方法的参数列表之后2. 声明的异常必须是 Exception 或者 Exception 的子类3. 方法内部如果抛出了多个异常, throws 之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。4.我们在使用throws时,要明确声明的异常是编译时异常还是运行时异常。
比如:
(1)

(2)
如果是 运行时异常调用者不处理异常也没关系,JVM会处理。
但如果是编译时异常一定要处理异常
处理方式:(1)try-catch捕获并处理
(2)借助throws将异常抛 给JVM来处理。

4.自定义异常类
定义Course类,Course包含private String cno,private String cname,private int credit,Course包括方法:public Course(),public Course。Define CreditException类扩展(继承) 在RunTimeException中,CreditException包含以下方法:public CreditException()、public CreditException(String Message)。
如果课程的学分低于0.5或高于6,则课程的构建方法将抛出CreditException,消息为“学分应在0.5和6之间!”。
定义公共类TestCourse,创建一个Course对象,并使用try/catch块来处理CreditException。
import java.util.Scanner;public class LogIn {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入cno");String cno=scanner.next();System.out.println("请输入课程名字");String cname=scanner.next();System.out.println("请输入学分");double credit=scanner.nextDouble();Course course=new Course(cno,cname,credit);try {if(!(course.getCredit()>=0.5&&course.getCredit()<=6)){throw new CreditException("课程的学分应在0.5到6之间");}else{System.out.println("输入成功学分为:"+course.getCredit());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
} class Course{private String cno;private String cname;private double credit;public Course(String cno, String cname, double credit) {this.cno = cno;this.cname = cname;this.credit = credit;}public Course() {}public String getCno() {return cno;}public void setCno(String cno) {this.cno = cno;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public double getCredit() {return credit;}public void setCredit(double credit) {this.credit = credit;}}
class CreditException extends RuntimeException{public CreditException(String message){super(message);}
} 注意事项
- 自定义异常通常会继承自 Exception 或者 RuntimeException
- 继承自 Exception 的异常默认是受查异常
- 继承自 RuntimeException 的异常默认是非受查异常
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞 ![]()

相关文章:
异常的顶级理解
目录 1.异常的概念与体系结构 1.1异常的体系结构 1.2异常的举例 1.3错误的举例 2.异常的分类 2.1编译时异常 2.2运行时异常 3.异常的处理 3.1异常的抛出throw 3.2try-catch捕获并处理 3.3finally 3.4 异常声明throws 4.自定义异常类 1.异常的概念与体系结构 1.1异常的…...
LinkedHashMap实现LRU缓存cache机制,Kotlin
LinkedHashMap实现LRU缓存cache机制,Kotlin LinkedHashMap的accessOrdertrue后,访问LinkedHashMap里面存储的元素,LinkedHashMap就会把该元素移动到最尾部。利用这一点,可以设置一个缓存的上限值,当存入的缓存数理超过…...
Google 开源库Guava详解(集合工具类)
任何具有JDK Collections Framework经验的程序员都知道并喜欢java.util.Collections.Guava提供了更多的实用程序:适用于所有集合的静态方法。这些是番石榴最受欢迎和成熟的部分。 对应于特定接口的方法以相对直观的方式分组: nterface JDK or Guava? …...
Ansys Zemax | 如何将光线追迹结果导出为IES格式
照明系统设计者通常需要向客户提供IES格式的数据。照明工程学会 (Illuminating Engineering Society,IES) 文件格式便于传输辉度数据,该格式得到了制造商和设计师的广泛认可。本文描述了如何生成IES文件并验证结果。(联系我们获取文章附件&am…...
JSONObject 比 Map好使的地方
需求:改originalJson中的json字符串的key,当key满足在configMapping中配置的key2情况的时候,把originalJson的key改成 configMapping中的value2。 上代码: import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject;p…...
[js] 图解 event.pageX event.clientX event.offsetX getBoundingClientRect
event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性 event.pageX、event.pageY 类似于event.clientX、event.clientY,…...
VsCode备忘
上次简单学习了一下vscode的使用,结果好长时间没用,今天打开又全忘了。。。再记录一下吧 快捷键 CtrlShiftP 命令面板,查找命令,设置等等 Ctrl 打开集成终端,监视生成输出 Ctrl, 打开设置 CtrlP 转到文件,使用转到符…...
Linux命令200例:Yum强大的包管理工具使用(常用)
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师࿰…...
使用 Linux 相关知识部署博客系统
目录 编辑一、认识 Linux 二、如何拥有 Linux 环境 三、常见的 Linux 命令 1、目录相关命令 (1)ls (2)pwd (3)cd 2、文件操作相关命令 (1)touch (2…...
Linux--进程--vfork与fork区别
vfork: 所需头文件:#include <sys/types.h> #include <unistd.h> pid_t vfork(void); 功能: vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。 参数ÿ…...
Ubuntu系统重装nvidia gpu驱动
1. 卸载原驱动 sudo apt remove *cuda* sudo apt remove *nvidia* sudo /usr/bin/nvidia-uninstall sudo dpkg -l | grep ^rc | cut -d -f3 | sudo xargs dpkg --purge sudo rm -rf ~/.cuda-license-* sudo apt purge nvidia-cuda-toolkit sudo apt remove nvidia-driver-* s…...
Java + Selenium + Appium自动化测试
一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度) 三、安装应用到Genymotion上,如下图我安装一个计算机的小应用ÿ…...
【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单
sgLazyCascader源码 <template><div :class"$options.name"><el-cascader :props"props" v-model"model" :placeholder"placeholder || 请选择" :options"options"></el-cascader></div> &l…...
2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析
# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...
一、Linux下常用的压缩格式
一、Linux下常用的压缩格式 Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。 二、Windows下7ZIP软件的安装 因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件。 三、gzip压缩工具 .gzip工具负…...
MySQL 查询 - 排除某些字段的SQL查询,提升查询性能
序言 某些时候,需要查询拥有很多很多字段的表,但是查询表时,其中有一些不需要查询的字段,会增加查询的负担,所以这时候,就需要排除这些冗余的字段,指定需要的字段查询,提升查询性能…...
国产信创服务器如何进行安全可靠的文件传输?
信创,即信息技术应用创新,2018年以来,受“华为、中兴事件”影响,国家将信创产业纳入国家战略,并提出了“28n”发展体系。从产业链角度,信创产业生态体系较为庞大,主要包括基础硬件、基础软件、应…...
ARTS第五周:S - 数据编织 Data fabric
Brife 数据编织/数据经纬(Data Fabric)是一种新型的数据管理和治理方法,旨在连接和整合所有数据源和数据目标,实现数据的无缝移动和访问。它是一种跨平台、跨云、跨技术的解决方案,可以连接各种类型的数据࿰…...
基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程
详情点击链接:基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程 一,空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软件…...
Spring Boot 介绍
Spring Framework的发展和Spring Boot Spring 3 支持Java注解Spring 4 支持 Java 8, 同时推出Spring Boot Spring Boot 简化了Spring配置。Spring Boot是什么? Boot 翻译有靴子,启动的意思, 在计算机领域有引导的意思, 比如计算机启动引导或是Linux 的引导程序。 Spring B…...
从省赛失误到国赛精进:十五届蓝桥杯EDA组PCB布局实战复盘与优化
1. 省赛翻车现场:一个封装错误引发的惨案 去年省赛那天,我永远记得提交作品前那种胸有成竹的感觉。直到成绩公布看到省二的结果,才发现自己犯了个低级错误——数码管封装绑定错了。打开设计文件一看,本该是标准尺寸的数码管&#…...
Claude Code能控制电脑了!开发全程不离终端,全无人值守模式启动
在官方演示中,只甩一个指令过去,AI就自己启动正在开发的应用,自己复现bug,自己修复,自己测试修复效果。 Claude Code上线Computer Use,直接捅破开发效率天花板。 在官方演示中,只甩一个指令过…...
Apache Spark 第 11 章:Delta Lake 与 Lakehouse
第十一章深入拆解 Delta Lake 与 Lakehouse 架构,这是现代数据工程的核心组件。从传统数据湖的痛点出发,逐层剖析 Delta Lake 的实现原理。 第一张:为什么需要 Delta Lake。三大痛点和 Delta Lake 的解法一目了然。接下来看最核心的实现机制—…...
别再手动敲命令了!用Ansible一键搞定Harbor 2.14.0高可用部署(附完整Playbook)
Ansible自动化部署Harbor 2.14.0高可用集群实战指南 在容器化技术普及的今天,企业级私有镜像仓库Harbor已成为DevOps工具链中不可或缺的一环。然而,传统的手动部署方式不仅耗时费力,更难以保证多环境的一致性。本文将展示如何通过Ansible实现…...
Mustache错误处理与调试:7个常见问题排查清单
Mustache错误处理与调试:7个常见问题排查清单 【免费下载链接】mustache Logic-less Ruby templates. 项目地址: https://gitcode.com/gh_mirrors/mu/mustache Mustache是一款流行的无逻辑Ruby模板引擎,但开发者在实际使用中经常会遇到各种错误和…...
如何在5分钟内开始使用Ivy Wallet:新手入门教程
如何在5分钟内开始使用Ivy Wallet:新手入门教程 【免费下载链接】ivy-wallet Ivy Wallet is an open-source money manager app for android that you can either build or download from Google Play. 项目地址: https://gitcode.com/gh_mirrors/iv/ivy-wallet …...
终极指南:Laravel DataTables 性能优化实战——不同场景下的表现对比
终极指南:Laravel DataTables 性能优化实战——不同场景下的表现对比 【免费下载链接】laravel-datatables jQuery DataTables API for Laravel 4|5|6|7|8|9|10 项目地址: https://gitcode.com/gh_mirrors/la/laravel-datatables Laravel DataTables 是一款强…...
立创·地阔星开发板开箱测评:除了点灯,STM32F103C8T6还能怎么玩?(附资源下载与避坑指南)
立创地阔星开发板深度探索:从开箱到创意项目实战 拆开快递包装的那一刻,这块蓝色PCB板安静地躺在防静电袋里——这就是最近在创客圈备受关注的立创地阔星开发板。作为一款基于STM32F103C8T6芯片的高性价比开发平台,它不仅适合初学者入门&…...
Delphi MVC框架ActiveRecord中间件多连接配置详细解析[特殊字符]
1. 数组长度必须一致1234567// 错误示例 - 会抛出异常TMVCActiveRecordMiddleware.Create(MainDB,[LogDB, CacheDB], // 2个元素[LogDB_Def], // 1个元素 ← 错误!MultiConnections.ini);2. 连接名命名规范1234567// 建议使用有意义的命…...
构建智能体的专业技能树 - Agent Skills生态全析(中篇)
一、概述 这篇文章我们将围绕Skills、Tools、MCP、Subagents 四个组件有什么区别、Anthropic 官方做好了哪些现成 Skills、如何从零创建一个自定义 Skill 的完整流程 这些四个方面来进行讲解。 二、智能体生态系统概览 在 Anthropic 构建的智能体生态中,多种技术组件…...
