初识java——javaSE(8)异常
文章目录
- 一 异常的概念与体系结构
- 1.1 什么是异常?
- 1.2 异常的体系结构!
- 1.3 编译时异常与运行时异常与Error
- 编译时异常:
- 异常声明:throws关键字
- 运行时异常:
- 什么是Error?
- 二 处理异常
- 2.1 异常的抛出:throw(注意与throws有区别!)
- 2.2 异常的捕获(具体处理):
- try—catch语句
- 2.3 关于异常的处理方式:
- 2.4 异常处理流程总结:
- 三 自定义异常类
一 异常的概念与体系结构
1.1 什么是异常?
//异常是指代码中除了语法错误之外,出现的问题导致代码出现不正常行为的状况称之为异常!//在java中用异常类来表示异常,因为java的思想是一切皆对象。
比如数组越界,除0,栈溢出:这三种异常:
//数组越界:int array[] = {1,2,3,4,5};System.out.println(array[10]);
结果:
显示为:ArrayIndexOutOfBoundsException异常(此异常为数组越界异常)
后面是原因: Index 10 out of bounds for length 5
//除0System.out.println(10/0);
结果:
显示为: ArithmeticException异常(此异常为算术异常)
后面显示原因: / by zero
1.2 异常的体系结构!
异常种类繁多,为了对不同异常或者错误进行很好的分类管理,Java内部维护了一个异常的体系结构:
大体的体系结构:
具体的:
其中RunTimeException以及其子类对应的异常,都称为运行时异常。
1.3 编译时异常与运行时异常与Error
编译时异常:
所谓编译时异常是指在编译阶段发生的异常,为此我们必须对可能出现的编译异常进行操作,声明以便抛出或者直接处理。而不是像对运行时异常那样,可以既不声明,也不处理(异常的处理下面会阐述到!)。
异常声明:throws关键字
throws关键字处于方法声明时参数列表之后,当方法中抛出编译时异常,表示该方法并没有处理异常,而是交
给方法的调用者来处理。即此关键字的作用在于提醒方法的调用者处理异常。
举例: 克隆对象:
我们必须进行对可能出现的异常进行声明或者处理!
用throws关键字进行声明:
后面跟上可能出现的异常类:CloneNotSupportedException
运行时异常:
运行时异常是指程序在编译阶段结束后,生成了.class文件,在JVM执行时,出现的异常。
对于可能出现的运行时异常,我们可以不进行声明或者处理。
比如:数组越界
//数组越界:int array[] = {1,2,3,4,5};System.out.println(array[10]);
什么是Error?
//Error是指java虚拟机无法解决的严重问题,比如:JVM内部错误,资源耗尽 如:栈溢出
举例:
public static void func1 (){func1();}public static void main(String[] args) {func1();}
要注意,红圈的部分其他的是Exception,而此处是Error.
我们是不会用throws声明Error类及其子类的异常的,因为出现了就没救(JVM无法解决),无意义。
二 处理异常
当异常出现时,我们可以选择进行处理,或者什么都不做,交给JVM处理
JVM处理的结果即抛出异常,结束程序!
在Java中,异常处理主要的5个关键字:throw、try、catch、finally、throws。
2.1 异常的抛出:throw(注意与throws有区别!)
异常的抛出用于当程序出现问题时,报告给调用者情况。
举例:
public class Test {public static void func1 (){func1();}public static void main(String[] args) {//throw关键字int a = 10;if(a<20){throw new ArithmeticException("胡乱调用了异常类");}System.out.println(a);}}
我们设定的条件是当a<20时,抛出异常,结果成功。
结果还表明:当抛出异常后,异常后面的代码不被执行。
2.2 异常的捕获(具体处理):
异常的捕获即异常的具体处理,主要有两种方式:一种是throws声明,这个在前面讲过,不再赘述,另一种则是try—catch捕获
try—catch语句
try—catch语句的语法格式是:
try{//此处放置要执行的代码,可以会出现异常}catch (要捕获的异常类型 e){// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类// 时,就会被捕获到 ,对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码}[catch(要捕获的异常类型 e){//此处放置处理异常的代码}finally{//此处放置的代码,必定会被执行}]//后续代码://此处的代码,如果没出现异常或者出现了异常并处理了,则此处代码会被执行//若出现了异常但没有被处理,则此处的代码不会被执行!注: (1) [] 中的内容可加可不加(2) try中的代码块不一定会报异常!
其中finally关键字的代码块用于回收系统资源,不管是程序退出,还是抛出异常都需要回收资源
比如在打开文件后,需要关闭文件,即回收系统资源。
举例1 :有多个异常时,try-catch语句能否同时捕获?
//try—catch语句// int [] array = {1,2,3,4,5};int [] array = null;try{System.out.println(10/0);System.out.println(array.length); //打印数组的长度}catch (NullPointerException e){//空指针异常System.out.println("空指针异常");}catch (ArithmeticException e){// 异常的处理方式System.out.println(e.getMessage()); // 只打印异常信息System.out.println(e); // 打印异常类型:异常信息e.printStackTrace(); // 打印信息最全面}finally {System.out.println("finally中执行的代码");}System.out.println("后续代码块");
结果表明:我们通过try—catch语句只能捕获一个异常因为: try块内抛出异常位置之后的代码将不会被执行
举例2:
如果多个异常的处理方式是相同的,则简写成:
int[] array = null;try {System.out.println(10 / 0);System.out.println(array.length); //打印数组的长度} catch (NullPointerException | ArithmeticException e) {//空指针异常System.out.println(e.getMessage()); //只打印异常信息——/by zeroSystem.out.println(e); // 打印异常类型:异常信息e.printStackTrace(); //打印信息最全面 ——打印异常类型,打印异常信息,还打印异常所在的代码!} finally {System.out.println("finally中执行的代码");}System.out.println("后续代码块");}
举例三:
如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误:
2.3 关于异常的处理方式:
2.4 异常处理流程总结:
- 先执行try块中的代码
- 如果发现异常,则在catch中判断是否与catch的异常类型相同,如果相同则执行catch中的代码,如果不同则将异常向上传递给上一层调用者。
- 无论异常是否被处理,finally中的代码都会被执行(在该方法结束之前执行),但是如果异常并没有被处理,则后续代码不会被执行。
- 如果上层调用者依然无法处理异常,则继续传递给上层,直到传递到main方法,main方法也无法处理,则交给JVM,最终异常结束程序。
public static void func() {int[] arr = {1, 2, 3};System.out.println(arr[100]);}public static void main(String[] args) {func();System.out.println("after try catch");}
结果表明:显示了异常的调用栈,且最终after try catch语句没有被执行!
三 自定义异常类
java中提供的异常类不能代表所有我们在日常开发中遇到的问题,所以我们需要自己定义异常类
举例:
package demo1;public class PasswordException extends Exception{public PasswordException(String message){super(message);}}
package demo1;public class UserNameException extends Exception{public UserNameException(String message){super(message);}
}
public class Test {private String userName = "admin";private String password = "123456";public void loginInfo(String userName, String password)throws UserNameException,PasswordException{if (! this.userName.equals(userName)) {throw new UserNameException("用户名错误!");}if (! this.password.equals(password)) {throw new PasswordException("用户名错误!");}System.out.println("登陆成功");}public static void main(String[] args) {try {new Test(). loginInfo("admin", "123456");} catch (UserNameException e) {e.printStackTrace();} catch (PasswordException e) {e.printStackTrace();}}
注意事项
自定义异常通常会继承自 Exception 或者 RuntimeException
继承自 Exception 的异常默认是受查异常
继承自 RuntimeException 的异常默认是非受查异常.
相关文章:

初识java——javaSE(8)异常
文章目录 一 异常的概念与体系结构1.1 什么是异常?1.2 异常的体系结构!1.3 编译时异常与运行时异常与Error编译时异常:异常声明:throws关键字 运行时异常:什么是Error? 二 处理异常2.1 异常的抛出:throw(注…...
C语言面试题11至20题
探索编程面试题:深度解析11至20题 在编程面试中,经常会遇到一些需要深入理解计算机科学基础和编程原理的问题。以下是对一些常见面试题的详细解答,涵盖递归、循环控制、内存管理等关键概念。 11. 递归函数定义没有问题,递归深层…...

视频汇聚EasyCVR综合安防平台对接GA/T1400公安视图库及应用方案
随着科技的不断进步,视频监控系统在公共安全领域发挥着越来越重要的作用。GA/T1400公安视图库作为公安视频图像信息应用系统的标准,为视频监控系统的对接提供了统一的规范和技术要求。 GA/T1400标准的应用范围广泛,涵盖了公安系统的视频图像信…...
在Github找自己想要的的项目
点击进入github 1.首先进入到github的首页;搜索框搜(先关键字搜索)in:name 你的找的项目 比如: in:name Sping Boot2.进一步检索(点赞数高的) in:name Sping Boot star:>1000 3.如何要找最新的&…...

第16篇:JTAG UART IP应用<三>
Q:如何通过HAL API函数库访问JTAG UART? A:Quartus硬件工程以及Platform Designer系统也和第一个Nios II工程--Hello_World的Quartus硬件工程一样。 Nios II软件工程对应的C程序调用HAL API函数,如open用于打开和创建文件&#…...

Python——Selenium快速上手+方法(一站式解决问题)
目录 前言 一、Selenium是什么 二、Python安装Selenium 1、安装Selenium第三方库 2、下载浏览器驱动 3、使用Python来打开浏览器 三、Selenium的初始化 四、Selenium获取网页元素 4.1、获取元素的实用方法 1、模糊匹配获取元素 & 联合多个样式 2、使用拉姆达表达式 3、加上…...

2024最新群智能优化算法:大甘蔗鼠算法(Greater Cane Rat Algorithm,GCRA)求解23个函数,提供MATLAB代码
一、大甘蔗鼠算法 大甘蔗鼠算法(Greater Cane Rat Algorithm,GCRA)由Jeffrey O. Agushaka等人于2024年提出,该算法模拟大甘蔗鼠的智能觅食行为。 参考文献 [1]Agushaka J O, Ezugwu A E, Saha A K, et al. Greater Cane Rat Alg…...

苍穹外卖数据可视化
文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…...
AWS需要实名吗?
AWS作为全球领先的云计算服务提供商,对于实名认证有着严格的要求。实名认证是指用户在使用AWS服务时需要提供真实有效的个人身份信息,以便AWS能够对用户的身份进行验证和管理。对于AWS而言,实名认证是确保用户安全和服务质量的重要环节&#…...

Android下HWC以及drm_hwcomposer普法(下)
Android下HWC以及drm_hwcomposer普法(下) 引言 不容易啊,写到这里。经过前面的普法(上),我相信童鞋们对HWC和drm_hwcomposer已经有了一定的认知了。谷歌出品,必须精品。我们前面的篇章见分析到啥来了,对了分析到了HwcDisplay::in…...

【评价类模型】熵权法
1.客观赋权法: 熵权法是一种客观求权重的方法,所有客观求权重的模型中都要有以下几步: 1.正向化处理: 极小型指标:取值越小越好的指标,例如错误率、缺陷率等。 中间项指标:取值在某个范围内较…...

PG 窗口函数
一,简介 窗口函数也叫分析函数,也叫OLAP函数,通过partition by分组,这里的窗口表示范围,,可以不指定PARATITION BY,会将这个表当成一个大窗口。 二,应用场景 (1)用于分…...

冯喜运:5.31晚间黄金原油行情分析及尾盘操作策略
【黄金消息面分析】:周五(5月31日),最新发布的数据显示,美国4月核心PCE物价指数月率录得0.2%,低于预期(0.3%),经济学家认为,核心指数比整体指数更能反映通胀。除此之外,美…...

Vue 框选区域放大(纯JavaScript实现)
需求:长按鼠标左键框选区域,松开后放大该区域,继续框选继续放大,反向框选恢复原始状态 实现思路:根据鼠标的落点,放大要显示的内容(内层盒子),然后利用水平偏移和垂直偏…...
C#加密与java 互通
文章目录 前言对方接口签名要求我方对接思路1.RSA 加密2.AES256加密 完整的加密帮助类 前言 提示:这里可以添加本文要记录的大概内容: 在我们对接其他公司接口的时候,时常会出现对方使用的开发语言和我方使用的开发语言不同的情况ÿ…...

C#【进阶】特殊语法
特殊语法、值和引用类型 特殊语法 文章目录 特殊语法1、var隐式类型2、设置对象初始值3、设置集合初始值4、匿名类型5、可空类型6、空合并操作符7、内插字符串8、单句逻辑简略写法 值和引用类型1、判断值和引用类型2、语句块3、变量的生命周期4、结构体中的值和引用5、类中的值…...
c语言之向文件读写数据块
c语言需要向文件读写数据块需要用到fread语句和fwrite语句 fread语句的语法格式 fread(butter,size,count,fp) butter:读取的数据存入内存地址 size:读取的字节大小 count:读取数据的个数 fp:读取的文件指针 fwrite语句语法格式 fwrite(butter,size,count,fp…...
6键编程智能照明:编程指南与深度解析
6键编程智能照明:编程指南与深度解析 随着智能家居的普及,智能照明系统逐渐成为现代家庭不可或缺的一部分。而6键编程智能照明,以其高度的灵活性和个性化设置,受到了越来越多消费者的青睐。那么,如何对6键编程智能照明…...
sql server 中的6种约束
一、约束定义 约束是用于定义和实施表的规则和限制,以确保数据的完整性和一致性。 即对一张表中的属性操作进行限制。 二、约束分类 通过定义约束,可以对数据库中的数据进行限制,以下是常见的约束: 1. 主键约束(Pr…...

师彼长技以助己(2)产品思维
师彼长技以助己(2)产品思维 前言 我把产品思维称之为:人生底层的能力以及蹉跎别人还蹉跎自己的能力,前者说明你应该具备良好产品思维原因,后者是你没有好的产品思维去做产品带来的灾难。 人欲即天理 请大家谈谈看到这…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...