Java 自定义异常及经验小结

embedded/2025/1/11 19:47:09/

javaException_0">1.java内置的异常类可以处理大部分异常情况。此外,用户还可以自定义异常,只需继承Exception类即可。

2.在程序中使用自定义异常类,大体可分为以下几个步骤:

(1)创建自定义异常类
(2)在方法中通过throw关键字抛出异常对象
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处用throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常

3.实例代码:

首先定义了一个自定义异常类 MyException,它扩展自 Java 的 Exception类。主要功能如下:
(1)字段: private int detail; 用于存储异常的具体信息,通常是一个数字。
(2)构造函数: public MyException(int a) 接受一个整数参数 a,并将其赋值给 detail 字段。
(3)toString方法: 重写了 toString 方法,返回包含 detail 信息的字符串,用于描述异常。
这个类在数字大于 10 时抛出。

java">package com.exception;//自定义的异常类
public class MyException extends Exception{ //继承Exception类//传递数字>10就抛出异常,定义int类型的变量private int detail;//写一个有参构造,快捷键 alt+insertpublic MyException(int a) {this.detail = a;}//重写toString方法,自定义异常,快捷键 alt+insert选择toString@Overridepublic String toString() {//会抛出的异常信息return "MyException{" +"detail=" + detail +'}';}
}

定义了一个类 Test3,其中包含一个静态方法 testmain 方法。具体功能如下:
test 方法: 接受一个整数 a,并抛出 MyException 异常。如果 a 大于 10,则抛出自定义异常;否则,打印 “OK”。
main 方法: 在 try 块中调用 test(11),由于 11 大于 10,抛出 MyException。在 catch 块中捕获该异常,并打印异常信息。

java">package com.exception;public class Test3 {//定义test方法static void test(int a) throws MyException {    //捕获异常System.out.println("传递的参数为:" + a);if(a>10){throw new MyException(a);   //抛出异常}System.out.println("OK");   //a<=10时输出}public static void main(String[] args){/*调用test方法,由于在test方法定义中使用了throws throw,调用的时候必须要try catch 捕获异常*/try {test(11);} catch (MyException e) {   //e会调用toString方法System.out.println("MyException=> " + e);}}}

结果:
在这里插入图片描述

4.总结

(1)运行时,逻辑合理,辅助try-catch处理(程序就不至于突然卡死)
(2)多重catch块后面,加一个catch(Exception)处理可能被遗漏的异常
(3)对于不确定的代码,也可以加上
try-catch
,处理潜在异常
(4)尽量去处理异常,切忌只是简单地调用printStackTrace() 去打印输出
(5)具体如何处理异常,要根据不同的业务需求和异常类型去决定
(6)尽量添加finally语句块去释放占用的资源


http://www.ppmy.cn/embedded/120093.html

相关文章

使用 MongoDB 在 Spring Boot 中构建安全的 RBAC 系统

介绍 您是否曾经构建过应用程序&#xff0c;然后突然意识到需要以更精细的方式管理用户访问权限&#xff1f;也许您已经硬编码了一些管理检查或在整个代码库中分散了权限逻辑。相信我&#xff0c;我经历过这种情况&#xff0c;维护起来并不好玩。 这就是基于角色的访问控制 (…

isEmpty和isBlank的区别

在 Java 中&#xff0c;String 类的 isEmpty() 和 isBlank() 方法有以下区别&#xff1a; isEmpty(): 定义: 检查字符串是否为空。返回值: 如果字符串的长度为 0&#xff0c;则返回 true&#xff1b;否则返回 false。示例:String str1 ""; String str2 "Hello…

什么是IPv6

目前国内的网络正在快速的向IPv6升级中&#xff0c;从网络基础设施如运营商骨干网、城域网&#xff0c;到互联网服务商如各类云服务&#xff0c;以及各类终端设备厂商如手机、电脑、路由器、交换机等。目前运营商提供的IPv6线路主要分为支持前缀授权和不支持前缀授权两种。 说…

开源链动 2+1 模式 S2B2C 商城小程序助力品牌实现先营后销与品效合一

摘要&#xff1a;本文探讨了在当今市场环境下&#xff0c;如何做到先营后销、品效合一。通过研究社区用户喜好&#xff0c;打造适合家庭消费的商品&#xff0c;并结合开源链动 21 模式 S2B2C 商城小程序&#xff0c;实现品牌的精准定位、创新包装以及小规格产品供应&#xff0c…

项目管理专业资质认证ICB 3中关于项目经理素质的标准

项目管理专业资质认证ICB 3中关于项目经理素质的标准&#xff0c;的确很全面&#xff0c;下面摘录之&#xff1a;

leetcode每日一题day20(24.9.30)——座位预约管理系统

思路&#xff1a;由于一直是出最小的编号&#xff0c;并且除此之外只有添加元素的操作&#xff0c;如果使用数组存储&#xff0c;并记录&#xff0c;这样出最小编号时间是O(n)复杂度,释放一个座位则是O(1)在操作出线机会均等的情况下&#xff0c;平均是O(n/2), 但对于这种重复 …

【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)

导读大纲 1.1.1 从 Java 调用扩展函数1.1.2 扩展函数无法重载 1.1.1 从 Java 调用扩展函数 在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数 调用它不涉及创建适配器对象或任何其他运行时开销这使得从 Java 使用扩展函数变得非常简单 调用静态方法并传…

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…