try catch的使用

news2025/3/13 7:42:57

try catch的使用

在 Java 中,try-catch 语句用于异常处理。异常处理可以帮助我们在程序出现错误时,不会导致程序崩溃,而是采取一定的措施来处理错误。try-catch 语句是用于捕获并处理异常的机制。

基本语法

try {
    // 可能会抛出异常的代码块
} catch (ExceptionType1 e1) {
    // 处理异常类型 1 的代码
} catch (ExceptionType2 e2) {
    // 处理异常类型 2 的代码
} finally {
    // 无论是否发生异常,都会执行的代码(可选)
}
  • try 块中包含可能抛出异常的代码。
  • catch 块用于捕获和处理异常。一个 try 可以跟多个 catch 块,按顺序捕获不同类型的异常。
  • finally 块是可选的,无论是否发生异常,finally 中的代码都会执行,通常用于资源清理等操作。

1. 基本的 try-catch 例子

下面是一个简单的 try-catch 例子,展示了如何捕获并处理一个除零异常 (ArithmeticException):

public class TryCatchExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // 这里会抛出 ArithmeticException 异常
            System.out.println("结果是:" + result);
        } catch (ArithmeticException e) {
            System.out.println("捕获到异常:" + e.getMessage());  // 处理异常
        }

        System.out.println("程序继续执行...");
    }
}
运行结果:
捕获到异常:/ by zero
程序继续执行...

2. 多个 catch 块

可以使用多个 catch 块来捕获不同类型的异常,并做出相应的处理。比如,如果有多个可能的异常来源,我们可以分别处理每个不同的异常类型。

public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[2];
            numbers[10] = 5;  // 数组越界异常
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界异常:" + e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println("算术异常:" + e.getMessage());
        } catch (Exception e) {
            System.out.println("通用异常:" + e.getMessage());
        }
    }
}
运行结果:
数组越界异常: Index 10 out of bounds for length 2

3. 捕获父类异常

Java 中的异常有层次结构,某些异常是其他异常的子类。如果你在 catch 中按顺序写了父类异常类型,它会先捕获父类类型的异常,之后的子类异常就无法捕获了。因此,父类异常的 catch 块通常写在子类异常的后面。

public class CatchParentException {
    public static void main(String[] args) {
        try {
            String s = null;
            System.out.println(s.length());  // 会抛出 NullPointerException 异常
        } catch (Exception e) {
            System.out.println("捕获到异常:" + e.getMessage());  // 捕获父类异常
        } catch (NullPointerException e) {
            System.out.println("空指针异常:" + e.getMessage());  // 这个代码永远不会执行
        }
    }
}
运行结果:
捕获到异常:null

4. finally 块

finally 块用于无论异常是否发生,都会执行的代码块。它常用于释放资源,如关闭数据库连接、文件流等。finally 块是可选的,但如果存在,它一定会被执行。

public class FinallyExample {
    public static void main(String[] args) {
        try {
            System.out.println("执行 try 块");
            int result = 10 / 2;  // 没有异常
            System.out.println("结果是:" + result);
        } catch (Exception e) {
            System.out.println("捕获异常");
        } finally {
            System.out.println("执行 finally 块");
        }
    }
}
运行结果:
执行 try 块
结果是:5
执行 finally 块

5. 捕获多个异常(JDK 7 及以上)

从 JDK 7 开始,Java 允许使用 |(管道符号)在一个 catch 块中捕获多种异常类型。这样可以减少代码重复,提高可读性。

public class MultiCatchExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[2];
            numbers[10] = 5;  // 数组越界异常
            int result = 10 / 0;  // 除零异常
        } catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
}
运行结果:
捕获到异常: Index 10 out of bounds for length 2

6. 抛出异常(throw)

try-catch 语句中,如果需要主动抛出异常,可以使用 throw 关键字。throw 用于显式地抛出一个异常。

public class ThrowExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);  // 主动抛出异常
        } catch (ArithmeticException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }

    public static int divide(int a, int b) {
        if (b == 0) {
            throw new ArithmeticException("除数不能为零");
        }
        return a / b;
    }
}
运行结果:
捕获到异常:除数不能为零

7. 自定义异常

你可以定义自己的异常类,继承 Exception 类,并在 try-catch 中捕获它。

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

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            throw new CustomException("这是一个自定义异常");
        } catch (CustomException e) {
            System.out.println("捕获到自定义异常:" + e.getMessage());
        }
    }
}
运行结果:
捕获到自定义异常:这是一个自定义异常

总结

  • try-catch 用于捕获和处理程序中的异常,防止程序崩溃。
  • 使用多个 catch 可以捕获不同类型的异常。
  • finally 块总会执行,通常用于资源清理。
  • JDK 7 引入了多异常捕获的简化语法,可以在一个 catch 块中处理多个异常类型。
  • 可以通过 throw 抛出异常,也可以自定义异常类。

通过合理的使用 try-catch,你能够提高程序的健壮性,并更好地处理错误情况。 [Something went wrong, please try again later.]

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

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

相关文章

【从零开始学习计算机科学】编译原理(一)编译过程概述

【从零开始学习计算机科学】编译原理(一)编译过程概述 绪论编译过程概述词法分析语法分析代码优化代码生成其他功能编译器的前端和后端绪论 什么叫编译程序?为什么我们需要编译程序?编译程序就是一个程序,将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻…

【算法day8】 Z 字形变换 -O(n)算法思路整理

Z 字形变换,算法思路整理 https://leetcode.cn/problems/zigzag-conversion/description/ 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下…

L3-1 夺宝大赛

输入样例 1: 5 7 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 2 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 7 1 5 7 1 1 1 5 5 3 1 3 5 1 4输出样例 1: 7 6样例 1 说明: 七支队伍到达大本营的时间顺次为:7、不可能、5、3、3、5、6&#xff0c…

Matlab:矩阵运算篇——矩阵

目录 1.定义 实例——创建矩阵 实例——创建复数矩阵 2.矩阵的生成 实例——M文件矩阵 2.利用文本创建 实例——创建生活用品矩阵 3.创建特殊矩阵 实例——生成特殊矩阵 4.矩阵元素的运算 1.矩阵元素的修改 实例——新矩阵的生成 2.矩阵的变维 实例——矩阵维度修…

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况,那么这里就有一些如下的注意事项,如以下代码: // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

Javaweb后端全局异常处理器

类名随便定义 这是异常处理的方法exceptionhandler responsebody作用,方法的响应值返回给前端,如果返回的是集合对象,会把集合对象转为json,再给前端响应返回

SpringBoot缓存抽象:@Cacheable与缓存管理器配置

文章目录 引言一、SpringBoot缓存抽象概述二、Cacheable注解详解2.1 Cacheable的关键属性 三、缓存管理器配置四、自定义键生成策略五、缓存同步与失效策略六、SpringBoot缓存最佳实践总结 引言 缓存是提升应用性能的关键技术,SpringBoot提供了强大的缓存抽象层&am…

江科大51单片机笔记【11】AT24C02(I2C总线)

一、存储器 1.介绍 RAM的特点是存储速度特别快,但是掉电会丢失;ROM的特点是存储速度特别慢,但是掉电不会丢失 SRAM是所有存储器最快的,一般用于电脑的CPU高速缓存,容量相对较少,成本较高;DRAM…

外层元素旋转,其包括在内的子元素一并旋转(不改变旋转中心),单元测试

思路&#xff1a;外层旋转后坐标&#xff0c;元素旋转后坐标&#xff0c;计算偏移坐标 <template><div class"outbox"><label>角度: <input v-model.number"rotate" type"number" /></label><br><div c…

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es&#xff0c;创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…

「 机器人 」扑翼飞行器通过总气动力控制四自由度运动方法

一、前言 在扑翼飞行中,总气动力(Total Aerodynamic Force)是指扑翼在运动过程中受到的所有空气动力作用的合力。它是由以下两种主要力的合成结果: 1. 升力(Lift, ):垂直于空气流方向的力,用于支持飞行器(或生物)的重量。 2. 阻力(Drag, ):平行于空气流方向的力,…

Axios简单说明,快速上手

Ajax&#xff1a;异步的JavaScript和XML 作用&#xff1a; 数据交换异步交互 Axios&#xff1a;就是对原生Ajax进行封装&#xff0c;简化书写&#xff0c;快速开发 使用逻辑&#xff1a; 首先要安装Axios&#xff0c;可以通过npm在项目中安装&#xff1a; 打开命令行工具…

云服务器安装宝塔面板部署

单机部署(前端vue项目) 服务器安装宝塔面板 连接到服务器 使用 SSH 连接到你的服务器&#xff1a; ssh rootip安装宝塔面板 运行以下命令来安装宝塔面板&#xff1a; yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安…

通义万相 2.1:AIGC 领域的 “王炸” 组合如何颠覆创作生态?

引言 在数字化和人工智能的飞速发展中&#xff0c;AIGC&#xff08;AI生成内容&#xff09;技术已经成为推动创作、设计和内容生成领域创新的核心力量。而当通义万相2.1与蓝耘智算平台强强联手&#xff0c;这一“王炸”组合不仅提升了AIGC的效率&#xff0c;还为创作生态带来了…

elementPlus之日历扩展功能

在这里做个记录&#xff0c;感觉用得还挺多的 功能有如下&#xff1a; 切换月份按钮对应日历视图和中间日期都要变选择日期日历视图要变点击日历视图中的不属于当前选中月份的日期即可触发日历视图变化以及中间日期也要变 代码如下&#xff1a; <template><div clas…

C# NX二次开发:获取模型中所有表达式并且更新某个表达式的值

大家好&#xff0c;今天要讲的是关于NX中表达式的相关UFUN函数。 UF_MODL_ask_exps_of_part (view source) tag_tpart_tagInputTag of the part to be queriedint *number_of_expsOutputNumber of expressions returnedtag_t * *expsOutput to UF_*free*All the expressions i…

Ollama本地部署deepseek-r1蒸馏版

Docker安装Ollama 拉取镜像 docker pull ollama/ollama​ 启动-使用GPU docker run -d --gpusall -p 11434:11434 --name ollama ollama/ollamadocker run : Docker 的核心命令&#xff0c;用于创建并启动一个新的容器。 -d : 后台模式&#xff08;detached mode&#xff09…

计算机毕业设计:基于web的乡村旅游系统

基于web的乡村旅游系统mysql数据库创建语句基于web的乡村旅游系统oracle数据库创建语句基于web的乡村旅游系统sqlserver数据库创建语句基于web的乡村旅游系统springspringMVChibernate框架对象(javaBean,pojo)设计基于web的乡村旅游系统springspringMVCmybatis框架对象(javaBea…

c#面试题整理9

1.遍历xml文档 2.解释一下这段 String s new String("xyz"); 这段在C#平台中&#xff0c;编译失败 3.说明一下抽象类 抽象类可以有构造函数 抽象类不能是静态和密封的类&#xff0c;密封的类表示无法继承&#xff0c;抽象类本身就不可实例化&#xff0c;加不好…

【具身相关】legged_gym, isaacgym、rsl_rl关系梳理

【legged_gym】legged_gym, isaacgym代码逻辑梳理 总体关系IsaacGymlegged_gymrsl_rl三者的关系 legged_gym代码库介绍环境模块env 总体关系 IsaacGym Isaac Gym 是 NVIDIA 开发的一个高性能物理仿真平台&#xff0c;专门用于强化学习和机器人控制任务。它基于 NVIDIA 的 Phy…