3.5. 异常处理

news2024/10/6 6:47:46

在Java中,异常是一种用于表示程序在运行过程中遇到的错误或异常情况的对象。Java提供了一套异常处理机制,可以帮助我们更好地处理运行时可能出现的错误和异常。异常处理的主要概念包括:

  1. 异常类:Java中的异常类是继承自Throwable类的类。异常类分为两大类:Error类和Exception类。其中,Error类表示程序无法处理的严重错误,通常我们不需要关心。而Exception类表示程序可以处理的异常,我们需要关注并处理这些异常。
  2. 异常处理语句:Java提供了trycatchfinallythrow等关键字,用于处理异常。
  3. 自定义异常类:我们可以根据需要创建自己的异常类,以便在特定情况下抛出和处理异常。

下面我们将详细介绍Java异常处理的相关概念,并给出相应的示例。

1. 异常处理语句

Java异常处理语句主要包括trycatchfinallythrow

  • try:用于包裹可能出现异常的代码块。如果在try代码块中发生异常,程序将跳转到相应的catch代码块。
  • catch:用于捕获并处理异常。每个catch代码块可以处理一种特定类型的异常。如果try代码块中发生了catch代码块所捕获的异常类型,程序将执行catch代码块中的语句。
  • finally:用于包裹无论是否发生异常都需要执行的代码。finally代码块中的语句在trycatch代码块之后执行。
  • throw:用于手动抛出一个异常。通常用于在满足某些条件时触发异常。

以下是一个异常处理示例:

public class ExceptionExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2,3};

        try {
            System.out.println("访问数组元素: " + numbers[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("捕获到异常: " + e);
        } finally {
            System.out.println("无论是否发生异常,都会执行这段代码。");
        }

        try {
            throwExample(-1);
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常: " + e);
        }
    }

    private static void throwExample(int number) {
        if (number < 0) {
            throw new IllegalArgumentException("传入的参数不能为负数。");
        }
    }
}

输出结果:

捕获到异常: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
无论是否发生异常,都会执行这段代码。
捕获到异常: java.lang.IllegalArgumentException: 传入的参数不能为负数。

这个示例演示了如何使用trycatchfinally语句处理异常。首先,我们尝试访问一个数组的非法索引,这会触发ArrayIndexOutOfBoundsException异常。然后,我们使用catch语句捕获并处理这个异常。接下来,我们使用finally语句来确保无论是否发生异常,都会执行一段代码。

在这个示例中,我们还演示了如何使用throw语句手动抛出一个异常。在throwExample()方法中,我们检查传入的参数是否为负数。如果是负数,我们使用throw语句抛出一个IllegalArgumentException异常。然后,在main()方法中,我们使用trycatch语句捕获并处理这个异常。

2. 自定义异常类

有时候,我们需要创建自己的异常类来表示特定的异常情况。为了创建一个自定义异常类,我们需要继承Exception类(或其子类),并实现相应的构造方法。以下是一个自定义异常类的示例:

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            validateAge(15);
        } catch (AgeValidationException e) {
            System.out.println("捕获到异常: " + e);
        }
    }

    private static void validateAge(int age) throws AgeValidationException {
        if (age < 18) {
            throw new AgeValidationException("年龄必须大于等于18岁。");
        }
    }
}

class AgeValidationException extends Exception {
    public AgeValidationException(String message) {
        super(message);
    }
}

输出结果:

捕获到异常: AgeValidationException: 年龄必须大于等于18岁。

在这个示例中,我们创建了一个名为AgeValidationException的自定义异常类。当我们尝试使用validateAge()方法验证一个不满足条件的年龄时,我们使用throw语句抛出一个AgeValidationException异常。然后,在main()方法中,我们使用trycatch语句捕获并处理这个异常。

总结一下,Java异常处理机制提供了一套强大的工具来处理程序运行时可能出现的错误和异常。通过使用trycatchfinallythrow等关键字,我们可以更好地控制程序的执行流程,并确保在遇到问题时采取适当的处理措施。此外,我们还可以创建自定义异常类来表示特定的异常情况。希望这些示例和解释能帮你更好地理解Java异常处理。如果你有任何疑问,请随时向我提问。

file

file

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

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

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

相关文章

L1频段卫星导航射频前端低噪声放大器芯片 AT2659/AT2659S

AT2659 是一款具有高增益、低噪声系数的低噪声放大器&#xff08;LNA&#xff09;芯片&#xff0c;支持L1频段多模式全球卫星定位&#xff0c;可以应用于GPS、北斗二代、伽利略、Glonass等GNSS导航接收机中。芯片采用先进的SiGe工艺制造&#xff0c;采用1.5 mm X 1 mm 0.78 mm的…

招标采购评标专家管理数智化解决方案

评标专家作为评标活动的重要一环&#xff0c;对保证评标活动的公平公正和评标质量&#xff0c;乃至提升营商环境都意义重大。 为了加强招采过程中评标专家的监督管理、健全评标专家库制度&#xff0c;保证评标活动的公平公正&#xff0c;提高评标质量&#xff0c;国家出台了相…

Pytest 高级进阶用法Hook使用pdm打包成插件

系列文章目录 提示&#xff1a;阅读本章之前&#xff0c;请先阅读目录 文章目录 系列文章目录前言一、创建项目二、安装pdm三、使用pdm创建项目四、创建src五、src下面&#xff0c;再创建包名六、编写plugin七、编写配置pyproject.toml八、使用pdm&#xff0c;添加pytest到该插…

如何看待人工智能?——比尔盖茨谈智能时代的机遇与挑战

原创 | 文 BFT机器人 01 比尔盖茨称AI将颠覆搜索、购物网站 “你永远不会去搜索网站了&#xff0c;也不会再去亚马逊了。” 当地时间5月22日&#xff0c;盖茨在出席一场关于AI的活动时表示&#xff0c;未来的顶级AI助理将颠覆现有互联网使用方式&#xff0c;替代人们执行某些任…

PHPMySQL基础(三):处理查询SQL返回的结果集

PHP&MySQL基础&#xff08;一&#xff09;:创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;二&#xff09;:通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客 目录 一、连接MySQL&#xff0c;处理错误&#xff0c;统一字…

面了个4年经验的测试,自动化都不会,真是醉了····

最近面试了一个 4 年测试经验的测试工程师&#xff0c;简历和个人介绍都提到了会自动化&#xff0c;于是我就问了几个自动化方面的问题&#xff1a; 在自动化测试中&#xff0c;你是如何选择和设计测试用例的&#xff1f;你使用过哪些自动化测试工具&#xff0c;如何选择自动化…

从C语言到C++_14(vector的常用函数+相关选择题和OJ题)

目录 1. vector的常用函数 1.1 vector 的介绍 1.2 vector 的初始化 1.3 vector 的操作和遍历 1.4 vector 的容量和增删查改 2. vector 相关笔试题 3. vector 相关OJ题 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 解析代码&#xff1a; 118. 杨辉…

华为OD机试真题B卷 Java 实现【求解立方根】,附详细解题思路

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…

【九】设计模式~~~结构型模式~~~外观模式(Java)

【学习难度&#xff1a;★☆☆☆☆&#xff0c;使用频率&#xff1a;★★★★★】 4.1. 模式动机 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别&#xff0c;如果是自己泡茶需要自行准备茶叶、茶具和开水&#xff0c;如图1(A)所示&#xff0c;而去茶馆喝茶&#xff0c;最…

从自动化到测开,测试人员逆袭之路从此起步...

在当今竞争激烈的软件测试行业中&#xff0c;近期的招聘市场确实面临一些挑战。大量的求职者争相涌入岗位&#xff0c;许多热衷于功能测试的人士甚至难以找到理想的工作机会。更不幸的是&#xff0c;连自动化测试和性能测试这些专业领域也受到了测试开发人员的竞争压力。然而&a…

jvs-rules 规则引擎-变量管理(函数式)的配置说明

JVS规则引擎变量管理 变量在规则引擎中的作用 数据存储和共享&#xff1a;变量配置允许在规则引擎中存储和访问数据。通过定义变量&#xff0c;可以将数据存储在规则引擎中&#xff0c;使其可供规则和决策过程使用。这样可以消除重复数据存储的需求&#xff0c;提高数据的共享…

ipad手写笔什么牌子好?最好用的电容笔

由于Apple pencil太过昂贵&#xff0c;很多小伙伴想入手一支电容笔&#xff0c;但是国内的品牌众多&#xff0c;不知道该如何挑选出合适自己的电容笔&#xff0c;我们在挑选电容笔要注意一些事项&#xff0c;才能挑选出合适的电容笔&#xff0c;今天给大家总结几个点再给大家介…

如何部署项目到Tomcat + 第一个Servlet程序

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、Tomcat 1.1 Tomcat是什么 1.2 下载安装 1.3 部署项目 二、第一个Servlet程序 2.1 Servlet是什么 2.2 创建Maven项目 2.3 引入依赖 2.4 创建目录 2.5 编写类方法 2.6 打包…

进程(三)

进程三 2.11 进程同步、进程互斥2.11.1 进程同步2.11.2 进程互斥2.11.3 总结 2.12 进程互斥和软件实现方法2.12.1 单标志法2.12.2 双标志先检查法2.12.3 双标志后检查法2.12.4 Peterson 算法2.12.5 总结 2.13 进程互斥和硬件实现方法2.13.1 中断屏蔽方法2.13.2 TestAndSet 指令…

vue 阻止事件冒泡常用的方法

在 Vue 中&#xff0c;阻止事件冒泡有两种常用方法&#xff1a; 1. 使用 event.stopPropagation() 方法&#xff1a; 在事件处理函数中&#xff0c;可以通过调用事件对象的 stopPropagation() 方法来阻止事件冒泡。例如&#xff1a; html <template> <div click"…

ChatGPT研究框架(2023)

摘要 ChatGPT市场反应热烈&#xff0c;国内外巨头纷纷入场 据统计&#xff0c;ChatGPT日活跃用户数的增速远超Instagram&#xff0c;1月份平均每天有超过1300万名独立访问者使用ChatGPT&#xff0c;是去年12月份的 两倍多&#xff1b;国内外科技巨头都非常重视ChatGPT引发的科…

牛客网DAY2(编程题)

圣诞节来啦&#xff01;请用CSS给你的朋友们制作一颗圣诞树吧~这颗圣诞树描述起来是这样的&#xff1a; 1. "topbranch"是圣诞树的上枝叶&#xff0c;该上枝叶仅通过边框属性、左浮动、左外边距即可实现。边框的属性依次是&#xff1a;宽度为100px、是直线、颜色为gr…

房地产行业IT运维安全就用行云管家堡垒机!

对于房地产行业而言&#xff0c;安全TI运维是构建数字化企业的核心&#xff0c;是推动其业务发展的信息化支撑体系。所以一个靠谱的IT运维安全软件非常重要。不仅可以省时省力&#xff0c;还能保障网络安全&#xff01;这里我给推荐行云管家堡垒机&#xff01; 行云管家公司介…

枚举、反射

枚举 jdk1.5之前&#xff0c;需要自己实现枚举 自己实现枚举 public class StatusEnum {private final String id;private final String code;private final String name;private StatusEnum(String id, String code, String name){this.id id;this.code code;this.name …

使用预训练的 ImageNet 模型进行图像分类

在这篇文章中,我们将学习如何使用预训练的 ImageNet 模型来执行图像分类。我们已经看到了如何训练一个简单的神经网络来对 CIFAR-10 数据集中的图像进行分类,但这是一个相对简单的任务,因为只有十个类别。另一方面,对大量对象类型进行分类将需要包含数百万个参数的更大网络…