【Java 基础】13 异常

1.异常是什么

异常是指在程序运行过程中可能发生的、与正常执行流程不符的事件。这些事件可能包括错误不合理的输入资源不足等。在 Java 中,异常是通过 throw 语句抛出的,可以是 Java 内置的异常类,也可以是自定义的异常类。

2. 异常类的层次结构

在 Java 中,异常类被组织成一个层次结构。

所有的异常类都是 Throwable 类的子类,主要分为两大类:ErrorException

1)Error

表示严重的错误,程序通常无法处理。例如,OutOfMemoryError表示内存不足。

2)Exception

表示程序可以处理的异常。又分为两种, RuntimeException(运行时异常)和其他非运行时异常。

  • RuntimeException: 表示程序运行时可能会出现的异常,这些异常通常由程序员在编写代码时可以避免的,例如,NullPointerExceptionArrayIndexOutOfBoundsException等。
  • 非运行时异常: 表示程序运行时难以避免的异常,通常是由外部条件造成的。例如,IOException表示输入输出操作可能发生错误。
    在这里插入图片描述

常见错误:

  • OutOfMemoryError 内存溢出
  • StackOverflowError 堆栈溢出异常
  • FileNotFoundException 找不到指定的文件或目录
  • RuntimeExceptions 运行时间异常
  • NullPointerException 空指针异常
  • ArithmeticException 数学运算异常
  • ArrayIndexOutOfBoundsException 数组下标越界异常
  • ClassCastException 类型转换异常
  • NumberFormatException 数字格式不正确异常

3. try-catch 块的使用

在 Java 中 try-catch块是用于捕获和处理异常的机制。在 try 块中放置可能抛出异常的代码,而在 catch 块中处理异常,使用 finally 来存放无论发不发生异常都要执行的代码。

try {// 可能抛出异常的代码// ...
} catch (ExceptionType1 e1) {// 处理 ExceptionType1 异常的代码
} catch (ExceptionType2 e2) {// 处理 ExceptionType2 异常的代码
} finally {// 无论是否发生异常,都会执行的代码块
}
  • try块: 包含可能抛出异常的代码。
  • catch块: 处理特定类型的异常。可以有多个catch块,每个块处理不同类型的异常。
  • finally块: 无论是否发生异常,都会执行的代码块。通常用于释放资源或清理工作。

4. 抛出异常

除了在运行时可能出现异常的情况下由系统抛出外,程序员也可以使用 throw 语句主动抛出异常。

public class CustomExceptionExample {public static void main(String[] args) {try {// 主动去抛出一个,自己定义的错误throw new CustomException("This is a custom exception.");} catch (CustomException e) {// 如果发生 CustomException 这种错误,然后输出下面的信息System.out.println("Caught custom exception: " + e.getMessage());}}
}// 自己定义一种错误类型,继承自 Exception
class CustomException extends Exception {// 一个有参构造函数,传入一个 messag (错误信息)作为参数public CustomException(String message) {super(message);}
}

在上述例子中,CustomException 是自定义的异常类,通过 throw 语句抛出,并在 catch 块中捕获。

5. 使用throws关键字声明异常

在方法签名中使用 throws 关键字声明方法可能抛出的异常。这告诉调用者该方法可能引发的异常类型,使得调用者能够适当地处理异常。

public class ThrowsExample {public static void main(String[] args) {try {// 因为此方法 使用了 throws 抛出 CustomException错误// 所以这里 使用了 try catch 去处理methodWithException();} catch (CustomException e) {System.out.println("Caught custom exception: " + e.getMessage());}}// 因为这个方法内 有可能 会出现 CustomException 这个错误// 而 本方法 还不想去 处理这种错误,所以就继续向上抛,向上抛错使用的就是 throws 关键字public static void methodWithException() throws CustomException {// 可能抛出异常的代码throw new CustomException("This is a custom exception.");}
}// 自己定义一种错误类型,继承自 Exception
class CustomException extends Exception {public CustomException(String message) {super(message);}
}

总结:

异常是我们实际开发过程中遇见最多的一个既熟悉又陌生的东西了,所以我们要掌握好异常是如何抛出及处理的,发生错误的时候,我们要仔细阅读给出的错误信息,因为这就是解决问题的关键。

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

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

相关文章

阅读文献总结2023

阅读文献基于卷积神经网络多源融合的网络安全态势感知模型 阅读文献 基于卷积神经网络多源融合的网络安全态势感知模型 题目基于卷积神经网络多源融合的网络安全态势感知模型文章信息:年份2023发文单位山西财经大学收录刊会计算机科学 (北大核心&#…

多线程(初阶五:wait和notify)

目录 一、概念 二、用法 (1)举个栗子: (2)wait和notify的使用 1、没有上锁的wait 2、当一个线程被wait,但没有其他线程notify来释放这个wait 3、两个线程,有一个线程wait,有一…

c++ pcl出现LNK2019 宏定义 PCL_NO_PRECOMPILE

问题:c pcl使用拟合圆柱时出现LNK2019问题; 说明:lib等配置没有问题; 解决方案 在上述代码中添加如下代码即可 #define PCL_NO_PRECOMPILE 是 C 中的预处理器指令,用于在代码中定义一个宏。而 #undef PCL_NO_PRECOM…

springBoot3.2 + jdk21 + GraalVM上手体验

springBoot3.2 jdk21 GraalVM上手体验 SpringBoot2.x官方已经停止维护了,jdk8这次真的得换了🤣 可以参考官方文章进行体验:https://spring.io/blog/2023/09/09/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virt…

洗盘子-栈

Description 小明和小苏将联手洗N个脏盘子。小明负责洗盘子,小苏负责擦干它们。每个盘子有一个指定的编号,范围为1 N。开始时,所有盘子按顺序排列在栈中,1号盘子在顶端,N号盘子在底端。 小明会先洗一些盘子&#xff…

C++基础 -25- 动态多态

静态多态在程序编译的时候,确定将要执行的状态。 动态多态在程序运行的时候,才能确定执行的状态。 下面举例实现动态多态 work函数接口通过传参不同做不同的工作 #include "iostream"using namespace std;class person {public:person(){}vi…

记一次移动云不同机器下的对等网络使用

1、清单 机器1的VPC: 子网:172.16.16.0/24 机器2的VPC 子网:172.27.27.0/24(子网不能与机器1的子网相同,否则对等网络无法成功建立) 2、添加对等网络 添加链接:https://console.ecloud.1008…

数字电源为什么一般用DSP控制,而不能用普通的单片机?

数字电源为什么一般用DSP控制,而不能用普通的单片机? 首先你要清楚,数字电源需要一个芯片具备什么功能? 1 能发PWM波 ,并且具备保护关断功能; 电源对PWM发波 要求很高,精度要ns级甚至ps级的&…

AIGC: 关于ChatGPT中token和tiktoken工具

什么是token token是GPT处理文本的基本的单位token本身可以是一个字,可以是一个词语,或特定语言中的一个字符token负责将输入的文本数据转换为GPT可以处理的数据格式GPT不同模型的计费就是根据token来的 token 的拆分 这里有一个 tiktoken 工具 是 op…

js数组方法大全(开发必会)

前言 js中数组的方法还是有很多的,而且js中数组操作方法我说是一个前端开发必须熟练使用和掌握的我想没有人反对吧。 说真的,数组这些api本身还是需要死记硬背的,就像乘法口诀表,很多东西你需要很熟练的就能写出来。就像让你去找数组里面符合条件的元素,你总可能定义一个空数…

docker部署kerberos,群晖nas中nfs开启kerberos校验

背景 nas开启nfs存储共享,默认情况下只能给IP/24做限制, 达不到安全效果 需要增加kerberos策略校验,并且持久化kerberos数据,避免容器重启丢失数据 环境描述 宿主机系统:CentOS Linux release 7.9.2009 (Core) Docker版本&#xf…

判断上三角矩阵

主对角线 &#xff08; 行 大于 列&#xff09;上的元素是0 &#xff1b;因为最后要先输入数组&#xff0c;后输出判断结果&#xff0c;所以运用到数组把结果存起来 #include <stdio.h> int input(int arr[][10]) { int i 0; int j 0; int m 0; s…

7nm项目之顶层规划——01数据导入

1.创建workspace 创建workspace后&#xff0c;在其目录下产生。 CORTEXA53.json文件是将有默认配置的文件master.json、有library的.config.json文件、tunes下CORTEXA53.tunes.json文件合并 注&#xff1a;tunes下的CORTEXA53.tunes.json文件可以覆盖一些master.json的设置…

绩效考核实施之——如何做好部门间绩效的平衡?

绩效考核是企业人力资源管理的难点&#xff0c;而绩效考核的公正往往是绩效考核成败的关键&#xff0c; 如果绩效考核的不公平不合理&#xff0c;极易带来企业人员的负面情绪&#xff0c;甚至引起人才的流失。想要保证绩效考核的公平性&#xff0c;就要做好绩效的平衡&#xf…

学习感悟一己之言

学习感悟一己之言 学习上克服困难实际上是克服心理上或认识上的障碍的过程。所谓的理解&#xff0c;就是化陌生为熟悉。看不懂&#xff0c;一方面是因为接触的材料太陌生&#xff0c;即远离你当前的背景知识&#xff1b;另一方面是材料或讲述者的描述刻画不准确或晦涩不当。有了…

Halcon算子中的slant倾斜hom_mat2d_slant

1.hom_mat2d_slant(HomMat2DIdentity, rad(50), y, 0, 0, HomMat2DSlant) --这个是选择20度和50度的。&#xff08;0&#xff0c; 0&#xff09;点对应的是左上角&#xff0c;50度就是让y轴产生有50度的倾角。 2.hom_mat2d_slant(HomMat2DIdentity, rad(60), x, 0, 0, HomMat2D…

【Python表白限定】李峋同款可写字版跳动的爱心(完整代码)

文章目录 跳动的爱心环境需求完整代码详细分析系列文章 跳动的爱心 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需要这…

RocketMQ-快速实战

MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联网中使用非常广泛的一系列服务中间件。 Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上&#xff0c;也可以分布在不同机器上。&#xff08;数据形式&#xff1a…

【C++笔记】红黑树封装map和set

一、map和set的泛型封装逻辑 map和set的底层都是红黑树&#xff0c;所以我们想要用红黑树封装map和set的第一个问题就来了&#xff0c;因为set是key结构而map是key-value结构&#xff0c;怎样用同一个底层结构去封装出两个不同存储结构的容器呢&#xff1f;难道我们要将红黑树…

git的版本控制流程

1、git是一款版本控制工具 例如我们常用的淘宝&#xff0c;每次升级&#xff0c;版本号就会加一。那么我们怎么控制版本号呢&#xff1f; --使用git。 2、最常使用的git指令 git add . 暂存 git commit -m"***" 提交到本地 git pull 将远程仓库代码下拉到本地 git …