java基础:异常体系

news2025/5/15 16:32:33

目录

  • 一、java异常体系介绍
  • 二、异常
    • 1、运行时异常
    • 2、非运行时异常
  • 三、错误
  • 四、异常的处理方式
    • 1、方式1:throws声明抛出异常
      • 1.1、throws关键字
      • 1.2、throw关键字
    • 2、方式2:try-catch-finally

一、java异常体系介绍

异常体系图如下:
Throwable类是所有异常*(Exception)错误(Error)的超类,两个直接子类为Error和Exception。
所有的异常的顶级父类都是Exception,Exception又分为
运行时异常(非受检异常)非运行时异常(受检异常)。

在这里插入图片描述

二、异常

异常的顶级父类是Exception,所有的子类都会继承于Exception。Exception的子类为运行时异常非运行时异常。

1、运行时异常

这些异常是在程序运行时可能出现的错误,如**NullPointerException(空指针异常)ArrayIndexOutOfBoundsException(数组索引越界异常)。**它们通常是由程序逻辑错误引起的,程序可以选择捕获处理,也可以不处理。
运行时异常可以举下面的例子:
(1)数组索引越界异常

public class M1 {
    public static void main(String[] args) {
        int[] arr = {1,4,5,7};
        System.out.println(arr[5]);
    }
}

上面的代码编译时没有出现问题,但是arr[5]超过了数组的长度。
在这里插入图片描述
运行结果如下:
在这里插入图片描述
(2) 空指针异常
在这里插入图片描述
在这里插入图片描述

2、非运行时异常

非运行时异常在编译时必须被处理否则程序无法通过编译。例如,IOException涉及I/O操作失败时抛出的异常。
在这里插入图片描述
在这里插入图片描述

上面的非运行时异常,和最后一个运行时异常的例子相似,只是上面的str赋值了null,可以看出非运行时异常在编译器中会有红色波浪线的提示,同时运行的时候也无法完成编译。

三、错误

Error表示严重的问题,通常与Java虚拟机(JVM)的状态有关,这些问题通常不是由程序控制的,也不应该被程序捕获。例如,OutOfMemoryError表示内存不足,NoClassDefFoundError表示找不到类定义。这些错误通常是致命的,一旦发生,JVM通常会选择终止线程。(错误不是异常必须处理,而且解决异常的方法不适用于错误
下面演示栈溢出异常:

public class M1 {
    public static void main(String[] args) {
        run();
    }
    public static void run(){
        run();
    }
}

在这里插入图片描述

四、异常的处理方式

异常处理的方式有两种:**throws(抛出异常)**和 try-catch-finally 方式

1、方式1:throws声明抛出异常

1.1、throws关键字

throws关键字主要用于方法声明上,指的是当方法之中出现异常后交由被调用处处理。throws主要作用:将异常抛出交给有能力解决的去解决。
下面提供一个throws的实例:

public class M1 {
    public static void main(String[] args) throws ClassNotFoundException {
        Class clazz = Class.forName("java讲课.异常.M1");
    }
}

可以将上面的throws 后面的异常名 换成 Exception,所有异常的父类就可以不需要再额外的抛出异常。

1.2、throw关键字

throw关键字的使用过程和语法如下:

throw new Exception("想要显示的错误");

在这里插入图片描述
上面的图片可以看出抛出异常后后面的所有的代码都不可以执行。

2、方式2:try-catch-finally

try-catch的方式就是捕获异常。

try : 该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,对捕获到的异常进行处理。
finally:无论结果是否有异常,都会执行的代码,一般用于释放资源。(典型的jdbc)

try-catch-finally的语法定义如下:

        try {
            int[] arr = {1,5,7,9};
            System.out.println(arr[5]);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println("我不管我就要执行");
        }

运行结果如下:
在这里插入图片描述

try-catch的语法定义如下:

        try {
            int[] arr = {1,5,7,9};
            System.out.println(arr[5]);
        }catch (Exception e){
            e.printStackTrace();
        }

在这里插入图片描述
注意点:
(1)try-catch可以配合使用且不适用finally
(2)try和catch不可以单独使用
(3)finally不能单独使用

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

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

相关文章

记录算法笔记(20025.5.14)对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目…

QT Creator配置Kit

0、背景:qt5.12.12vs2022 记得先增加vs2017编译器 一、症状: 你是否有以下症状? 1、用qt新建的工程,用qmake,可惜能看见的只有一个pro文件? 2、安装QT Creator后,使用MSVC编译显示no c com…

JVM 与云原生的完美融合:引领技术潮流

最近佳作推荐: Java 大厂面试题 – 揭秘 JVM 底层原理:那些令人疯狂的技术真相(New) Java 大厂面试题 – JVM 性能优化终极指南:从入门到精通的技术盛宴(New) Java 大厂面试题 – JVM 深度剖析&…

为何大模型都使用decoder-only?

第一章 架构之争的历史脉络 1.1 从双向到单向的革命 2017年,BERT的横空出世让双向注意力机制成为NLP领域的“武林盟主”。通过Masked Language Modeling(MLM),BERT在阅读理解、情感分析等任务中展现出惊人的表现,但它…

企业报表平台如何实现降本增效

一、你的企业是否正被这些问题拖累?‌ 财务还在手动汇总各门店的Excel销售数据;市场部总抱怨“客户分析全靠拍脑袋”;仓库突然发现爆款断货,但上周的报表显示库存充足…… 这些场景你是否熟悉?数据散落在ERP、E…

Ollama+OpenWebUI+docker完整版部署,附带软件下载链接,配置+中文汉化+docker源,适合内网部署,可以局域网使用

前言: 因为想到有些环境可能没法使用外网的大模型,所以可能需要内网部署,看了一下ollama适合小型的部署,所以就尝试了一下,觉得docker稍微简单一点,就做这个教程的,本文中重要的内容都会给下载…

ultralytics中tasks.py---parse_model函数解析

一、根据scale获取对应的深度、宽度和最大通道数 具体例如yaml文件内容如下: depth=0.33,那么重复的模块例如C2f原本重复次数是3,6,6,3,那么T对应的模型重复次数就是三分之一即1,1,2,1次。这个在后面定义的: width=0.25,max_channels=1024 原本c2=64,但经过make_div…

2024年业绩增速大幅回退,泸州老窖未能“重回前三”

撰稿|行星 来源|贝多财经 回望过去的2024年,受制于购买力与消费需求的持续疲软,白酒行业的发展面临诸多复杂性与不确定性,“量价齐跌”犹如笼罩在各大企业头顶的一片阴云。 正如巴菲特所言:“当潮水退去时,才知道谁在…

院校机试刷题第二天:1479 01字符串、1701非素数个数

一、1479 01字符串 1.题目描述 2.解题思路 方法一:暴力法 模拟过程,列出几个数据来a[1]1, a[2]2, a[3]3, a[4]5以此类推,这就是斐波那契数列,每一项都等于前两项之和,确定好a[1], a[2]即可。 方法二:动…

制作一款打飞机游戏48:敌人转向

射击功能 有一个重要的功能我们还没实现,那就是射击。目前,敌人还不能射击,这显然是不行的。因此,我们决定添加一个射击命令,暂时用一个显示圆圈的方式来表示射击动作。 编程语言的调试 有趣的是,我们创…

RK3588 串行解串板,支持8路GMSL相机

RK3588 支持的 GMSL 相机接入数量取决于所使用的解串板型号及配置方案: ‌xcDeserializer3.0 解串板‌ 可接入最多 ‌8 路 2M GMSL2 相机‌1。 ‌xcDeserializer4.0 解串板‌ 支持 ‌4 路 2M GMSL2 相机‌1。 ‌边缘计算盒解决方案‌ 部分商用方案可实现 ‌4 或 8…

OracleLinux7.9-ssh问题

有套rac环境,db1主机无法ssh db1和db1-priv,可以ssh登录 db2和db2-priv [rootdb1 ~]# ssh db1 ^C [rootdb1 ~]# ssh db2 Last login: Wed May 14 18:25:19 2025 from db2 [rootdb2 ~]# ssh db2 Last login: Wed May 14 18:25:35 2025 from db1 [rootdb2…

手机换IP真的有用吗?可以干什么?

在当今数字化时代,网络安全和个人隐私保护日益受到重视。手机作为我们日常生活中不可或缺的工具,其网络活动痕迹往往通过IP地址被记录和追踪。那么,手机换IP真的有用吗?它能为我们带来哪些实际好处?本文将为你一一解答…

如何实现一个运动会计分系统?(C语言版)

一、需求分析 设计一个运动会计分系统,计分信息包括参加学校,参与项目,性别,名次个数,各个学校获得名次信息。该系统具有以下功能 数据录入: 链表或结构体数组组织数据数据报表: 依照规定的报表格式对数据打印报表数据排序: 按照要求对数据进行统计,含简单统计及综合统计…

嵌入式学习笔记 - STM32 ADC,多重转换,内部参考电压,过采样,逐次逼近原理,采样时间

一 多个ADC器件,多重转换速率 每个型号MCU通常由多个ADC器件,比如STM32F4有三个ADC器件,每个ADC器件有一个最大转换速率,一般为2.4Mhz,即一个ADC器件每秒最多转换2.4M次,两次转换之间需要有时间间隔&#…

团结引擎 1.5.0 发布,抖音小游戏平台即将开放、Shader Graph功能新增…引擎能力再提升!

「团结引擎 1.5.0」来啦!本次技术更新的内容,涵盖了小游戏、团结引擎车机版、OpenHarmony、Shader Graph、Muse Chat、Hub&License、代码升级、Digital Asset Manager for Tuanjie、团结官方开源车模 Sample 几大方向。 小游戏 在 Tuanjie 1.5.0 版…

如何配置activemq,支持使用wss协议连接。

1、到阿里云申请一个证书&#xff0c;通过后下载jks证书。 2、配置activemq&#xff1a; 打开activemq安装目录中“conf/activemq.xml”&#xff0c;增加以下记录&#xff1a; <transportConnectors> <transportConnector name"wss" uri"…

初学c语言14(指针6)

一.sizeof和strlen的对比 1.sizeof 操作符&#xff0c;计算变量所占空间大小 2.strlen 库函数&#xff0c;函数原型为&#xff1a; 求的是字符串的长度&#xff0c;统计的是“\0”之前的字符个数 二.指针和笔试题解析 补充&#xff1a;数组名的意义 1.sizeof(数组名) 这…

数字化转型-4A架构之技术架构

4A架构系列文章 数字化转型-4A架构&#xff08;业务架构、应用架构、数据架构、技术架构&#xff09; 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数字化转型-4A架构之数据架构 数字化转型-4A架构之技术架构 一、 技术架构 Technology Architecture 1. 技…

kaggle薅羊毛

参考&#xff1a;https://pytorch-tutorial.readthedocs.io/en/latest/tutorial/chapter05_application/5_1_kaggle/#512-kaggle https://github.com/girls-in-ai/Girls-In-AI/blob/master/machine_learning_diary/data_analysis/kaggle_intro.md 1&#xff0c;code training…