JAVA学习笔记27(异常)

news2024/9/29 9:31:36

1.异常

​ *异常(Exception)

​ *快捷键 ctrl + alt + t 选中try - catch

​ *如果进行了异常处理,那么即使出现了异常,程序可以继续执行

1.1 基本概念

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

​ *执行过程中所发生的异常事件可分为两大类

​ 1.Error(错误):Java虚拟机无法解决的严重问题,如:JVM系统内部错误、资源耗尽等严重情况,比如:StackOverflowError[栈溢出]和OOM(out of memory),Error是严重错误,程序会崩溃

​ 2.Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如空指针访问,试图读取不存在的文件,网络连接中断等等。

​ *Exception分为两大类:运行时异常[程序运行时发生的异常]和编译时异常[编程时,由编译器检查出的异常]

1.2 异常体系图

在这里插入图片描述

​ *运行时异常,编译器检查不出来,编译器不要求强制处置的异常,一般是指编程时的逻辑错误,是程序员应该避免出现的异常

​ *对于运行时异常,可以不做处理,因为很普遍,全处理可能会对程序的可读性和运行效率产生影响

​ *编译时异常,是编译器要求必须处置的异常

1.3 常见的运行时异常

1.NullPointerException 空指针异常

​ *当应用程序试图在需要对象的地方使用null时,抛出异常

2.ArithmeticException 数学运算异常

​ *一个整数除以零

3.ArrayIndexOutOfBoundsException 数组下标越界异常

​ *用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引

4.ClassCastException 类型转换异常

​ *当试图将对象强制转换为不是实例的子类时,抛出该异常

5.NumberFormatException 数字格式不正确异常

​ *当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当的格式时,抛出该异常

1.4 常见的编译异常

1.SQLException //操作数据库时,查询表可能发生异常

2.IOException //操作文件时,发生的异常

3.FileNotFoundException //当操作一个不存在的文件时,发生异常

4.ClassNotFoundException //加载类,而该类不存在时,异常

5.EOFException //操作文件,到文件末尾,发生异常

6.IllegalArgumentException //参数异常

1.5 异常处理

​ *异常处理就是当异常发生时,对异常处理的方式

1.异常处理的方式

​ *try-catch-fianlly和throws方法二选一

​ *如果没有使用try-catch-finally或者throws方法,没有处理异常,默认throws到JVM处理,直接输出异常信息

1.try-catch-finally

​ 程序员在代码中捕获发生的异常,自行处理

​ 1.try块用于包含可能出错的代码

​ 2.catch块用于处理try块汇总发火说呢过的异常

​ 3.finally可写可不写

​ 4.如果异常发生了try块后面的代码将不会再执行,直接进入catch块

​ 5.可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch

main()
{
	try{
        Person person = new person();
        person = null;
        System.out.rpuntln(person.getName());	//NullPointerException
        int n1 =10;
        int n2 = 0;
        int res = n1 / n2;//ArithmeticException
    } catch (NullPointerException e){
        System.out.println("空指针异常=" + e.getMessage());
    } catch (ArithmeticException e) {
        System.out.println("算术异常=" + e.getMessage());
    } catch (Exception e){
        System.out.println(e.getMessage());
    }finally{
        
    }
}

​ 6.也可以直接进行try-fianlly配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉

​ *应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

try{
    //代码
}finally{
    //总是执行
}
try{
    代码	//可能有异常
}catch(Exception e){
	//捕获到异常
    //1.当异常发生时
    //2.系统将异常封装成Exception 对象e,传递给catch
    //3.得到异常后,程序员自己处理
    //4.如果没有发生异常,catch代码块不执行
}finally{
    //不管try代码块是否有异常发生,始终要执行finally
    //所以,通常将释放资源的代码,放在finally内
}
2.throws

​ 将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

​ *throws处理机制图

​ *JVM

​ //处理异常机制

​ //1.输出异常信息

​ //2.退出程序

在这里插入图片描述

1.基本介绍

​ *如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理

​ *在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

public class Throws01{
	public static void main(String[] args) {
        
    }
    
    //throws关键字后也可以是异常列表,即可以抛出多个异常
    public void f1() throws FileNotFoundException,ArrayIndexOutOfBoundsException {
        //创建了一个文件流对象
        //1.这里的异常是一个FileNotFoundException 编译异常
        //2.使用前面讲过的 try-catch-finally
        //3.使用throws,抛出异常,让调用f1方法的调用者(方法)处理
        FileInputStream fis = new FileInputStram("d://a.txt");
    }
}
2.注意事项和细节

​ 1.对于编译异常,程序中必须处理

​ 2.对于运行时异常,程序中如果没有处理,默认就是throws方法

​ 3.子类重写父类方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致。要么为父类抛出异常的类型的子类型

class Father {
    public void method() throws RuntimeException {
        
    }
}

class Son extends Father {
    //throws后面要和RuntimeException一致或者为其子类型
    @Override
    public void method() throws RuntimeException {
}
}

​ 4.在throws过程中,如果有try-catch,就相当于处理异常,就可以不必throws

1.6 自定义异常

​ *当程序中出现了某些"错误"但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息

1.自定义异常的步骤

​ 1.自定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException

​ 2.如果继承Exception,属于编译异常

​ 3.如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException),可以使用默认的处理机制

main() {
    int age = 80;
    //要求年龄在18 - 120之间,否则抛出一个自定义异常
    if(!(age >= 18 && age <= 120)) {
        throw new AgeException("年龄要在18-120之间")
}

class AgeException extends RuntimeException {
	public AgeException(String message) {
        super(message);
    }
}

1.7 throw和throws的区别

在这里插入图片描述

​ *throws

class Father {
    public void method() throws RuntimeException {
        
    }
}

​ *throw

if(!(age >= 18 && age <= 120)) {
    throw new AgeException("年龄要在18-120之间")}

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

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

相关文章

Spring Boot 自动装配执行流程

Spring Boot 自动装配执行流程 Spring Boot 自动装配执行流程如下&#xff1a; Spring Boot 启动时会创建一个 SpringApplication实例&#xff0c;该实例存储了应用相关信息&#xff0c;它负责启动并运行应用。实例化 SpringApplication 时&#xff0c;会自动装载META-INF/spr…

HarmonyOS ArkUI滚动类组件-List、ListItem

List 是很常用的滚动类容器组件之一&#xff0c;它按照水平或者竖直方向线性排列子组件&#xff0c; List 的子组件必须是 ListItem &#xff0c;它的宽度默认充满 List 的宽度。 List定义介绍 interface ListInterface {(value?: { initialIndex?: number; space?: numbe…

隐藏表头和最高层级的复选框

隐藏表头和最高层级的复选框 <!-- 表格 --><el-tableref"tableRef"v-loading"tableLoading"default-expand-allclass"flex-1 !h-auto"row-key"regionId":header-cell-class-name"selectionClass":row-class-name&q…

HarmonyOS ArkUI实战开发-窗口模块(Window)

窗口模块用于在同一物理屏幕上&#xff0c;提供多个应用界面显示、交互的机制。 对应用开发者而言&#xff0c;窗口模块提供了界面显示和交互能力。对于终端用户而言&#xff0c;窗口模块提供了控制应用界面的方式。对于操作系统而言&#xff0c;窗口模块提供了不同应用界面的…

深度学习500问——Chapter08:目标检测(3)

文章目录 8.2.7 DetNet 8.2.8 CBNet 8.2.7 DetNet DetNet是发表在ECCV2018的论文&#xff0c;出发点是现有的检测任务backbone都是从分类任务衍生而来的&#xff0c;因此作者想针对检测专用的backbone做一些讨论和研究而设计了DetNet&#xff0c;思路比较新奇。 1. Introduct…

ROS机器人实战,对标古月老师HRMRP机器人(一)——机器人总体方案设计

咳咳&#xff01;这个是自己的毕业设计&#xff0c;内容比较多就拆开发。设计实现了一款SLAM移动机器人&#xff0c;加机械臂完成视觉识别抓取的&#xff0c;同时还有语音识别控制、QT上位机控制、Web网页控制。前几年看古月老师的视频&#xff0c;看到古月老师设计的HRMRP&…

【c++】vector模拟实现与深度剖析

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 vector涉及到许多细节问题&#xff0c;比如双层深拷贝&#xff0c;迭代器失效等&#xff0c;本篇文章我们通过模拟实现来深度理解这块的内容 目录 1.基本框架2.构造和销毁3.元素访问4.获取…

SpringBoot多数据源(一)

SpringBoot多数据源&#xff08;一&#xff09; 1.多数据源使用场景1.1 业务复杂&#xff08;数据量大&#xff09;1.2 读写分离 2.多数据源配置3.应用4.测试 1.多数据源使用场景 1.1 业务复杂&#xff08;数据量大&#xff09; 简单理解就是业务量复杂&#xff0c;将庞大的数…

基于Springboot的校园新闻网站

基于SpringbootVue的校园新闻网站的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 校园新闻 论坛交流 留言反馈 后台登录 用户管理 新闻类型管理 校园新闻…

150G全国1米分辨率土地利用数据【2023年】

#1数据摘要 全国1米分辨率土地利用数据 全国范围,分省份分类,1米精度土地利用数据。2023年版本。 数据格式:tif 坐标系:wgs1984 范围:全国各省份 时间:2023年 精度:1米 地类:共计11个地类 中国1m分辨率土地覆盖数据 文件命名与介绍:数据为GeoTIFF栅格格式,每个城市…

Java:内部类

目录 1.内部类介绍2.实例内部类3.静态内部类4.局部内部类5.匿名内部类 1.内部类介绍 当一个事物的内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么这个内部的完整结构最好使用内部类。在 J…

处理游戏提示找不到steam_api64.dll丢失的方法

steam_api64.dll 是一个专门为 64 位 Windows 操作系统设计的动态链接库&#xff08;Dynamic Link Library&#xff0c;简称 DLL&#xff09;文件&#xff0c;与 steam_api.dll 类似&#xff0c;但针对的是 64 位应用程序。它属于 Steam 平台的一部分&#xff0c;主要服务于通过…

【Redis】面试题汇总

Redis什么是Redis、使用场景有哪些Redis 为什么这么快&#xff1f;Redis 数据类型及使用场景五种常见的 Redis 数据类型是怎么实现&#xff1f;Redis是单线程吗Redis 采用单线程为什么还这么快&#xff1f;Redis 如何实现数据不丢失&#xff1f;Redis 如何实现服务高可用&#…

为什么中级职称评审不通过?有什么原因?

参与过职称评审或者有了解过职称评审的小伙伴们&#xff0c;应该都知道&#xff0c;职称评审都是有通过率&#xff0c;不是你去评&#xff0c;一定会评下来&#xff0c;一定会发证的&#xff0c;那么评审为什么不通过&#xff1f;有哪些原因呢&#xff1f; 现在职称评审人越来越…

vue框架中的组件通信

vue框架中的组件通信 一.组件通信关系二.父子通信1.props 校验2.prop & data、单向数据流 二.非父子通信-event bus 事件总线三.非父子通信 (拓展) - provide & inject四.v-model简化父子通信代码五. .sync修饰符 一.组件通信关系 组件关系分类&#xff1a; 1.父子关系…

细水雾发生器你的相信我的诚信

做销售就是两个信&#xff1a;你的相信&#xff01;我的诚信&#xff01;成交就两颗心&#xff1a;你的放心&#xff01;我的用心&#xff01;你给我一次合作的机会&#xff0c;我给你十分满意的产品。一次合作&#xff0c;终身朋友&#xff5e; 产品的结构&#xff1a; 细水雾…

快速了解什么是MES系统

近年来在制造业的推动下&#xff0c;大家是否会经常听到MES系统这一词&#xff0c;但是对于其具体能解决什么问题却不是很清晰。接下来&#xff0c;让大家快速地了解一下到底什么是MES系统以及MES系统能够解决什么问题。 什么是MES制造执行系统 制造执行系统&#xff08;Manufa…

TBWeb开发版V3.2.6免授权无后门Chatgpt系统源码下载及详细安装教程

TBWeb系统是基于 NineAI 二开的可商业化 TB Web 应用&#xff08;免授权&#xff0c;无后门&#xff0c;非盗版&#xff0c;已整合前后端&#xff0c;支持快速部署&#xff09;。相比稳定版&#xff0c;开发版进度更快一些。前端改进&#xff1a;对话页UI重构&#xff0c;参考C…

Excel超级处理器,批量创建工作表,这也太方便了吧

在工作中&#xff0c;经常要创建或复制多个工作表&#xff0c;按照日期或指定的工作表名&#xff0c;为了能够更加方便快捷&#xff0c;那么下面介绍使用超级处理的应用。 超级处理器下载与安装 1、按照本月日期创建新工作表 2、按照本月日期复制工作表 3、按照单元格内容创建…

外显子测序wes

外显子是基因组中能够转录组出成熟RNA的部分。一个基因组中所有外显子的集合&#xff0c;即为外显子组。值得注意的是&#xff0c;通常所说的全外显子组测序&#xff0c;是指针对蛋白编码基因的外显子&#xff0c;很少涉及非编码基因。 基因(gene)是DNA中含有特定遗传信息的一…