网站首页 > java教程 正文
在软件开发的世界里,异常处理是保证程序健壮性的关键一环。Java标准库中提供了非常多的异常类型,用来表达各种异常情况。
然而,在真实开发中,这些异常并不能完全满足我们的需求,因为标准库的异常往往表达的是技术层面,而不是业务层面的需求。
像账号密码错误这种情况,用标准库的异常就不太合适。所以,在开发中,我们会自定义异常类型来表达符合我们业务的异常情况。
自定义异常
自定义异常非常简单,只要继承异常类就可以定义我们自己的异常。
之前的文章说过,强烈建议大家继承RuntimeException。在自定义异常时,还强烈建议大家照着父类学习,提供多个构造方法。这样就可以传递错误信息和堆栈信息。
异常自定义好后,我们就可以new出异常对象,并用throw关键字来主动抛出异常。
throw和throws的区别
这里要注意,throw和throws关键字只有一个字母之差,不要弄混了。
throw只能用在代码块中,throws只能用在方法声明上。throw是用来主动制造并抛出异常,而throws是声明方法可能会发生的异常。语法层面相信大家理一理也就清楚了。主要是应用层面让人拿不准。
我们什么时候该主动抛出异常呢?
假设我们有一个接收String参数的方法,方法中会对该参数进行一些逻辑处理。正常的业务流程要求不允许null值出现。
可如果调用者传递了一个null值进来,此时我们该怎么做呢?
基本就这三大类处理方式:第一种是设置默认值,第二种是直接结束方法,第三种就是抛出异常。
这三种方式各自的特点都非常明显。
设置默认值就好像你非法进入一个地方,保安发现了你,不光没赶你走,还贴心的给了你一个身份牌,让你可以继续前行。
直接结束方法就好像保安发现了你,就不让你继续前进了。
抛出异常就比较猛了,就好像保安发现了你,不光不让你继续前进,还把你打了一顿。要是你没有捕捉异常,你就会被保安打死。
知道各个方式的特点后,其实就能根据自己的需求来做相应的处理了。如果问题能够解决,并且你也愿意解决,那就让逻辑继续执行。如果问题无法解决,或者你不愿解决,但又不至于抛个异常给调用者,就可以直接结束方法。如果问题非常严重,严重到有必要强势警告调用者,就可以抛出异常。
到后期我们抛出异常,除了有中止程序进行强提示的作用外,还可以和框架配合以达到某些效果,比如可以触发事物回滚。当然,这是后话了,新手现在不用纠结。
猜你喜欢
- 2024-11-06 Java核心知识3:异常机制详解(java的三种核心机制是什么)
- 2024-11-06 【Spring系列】05 自定义异常以及全局异常处理器 #java
- 2024-11-06 3种Sentinel自定义异常,你用过几种?
- 2024-11-06 关于Java Exception异常的深入用法及实例
- 2024-11-06 Java-throw异常详解以及过程(java throw exception)
- 2024-11-06 《JAVA编程思想》5分钟速成:第12章(异常)
- 2024-11-06 面试官:java开发中异常怎么定义好 程序员:不知道
- 2024-11-06 「译」11条Java异常处理的最佳实践
- 2024-11-06 Java入门教程十一(异常处理)(java异常处理的三种方法)
- 2024-11-06 Java,你管这叫异常?(java异常是什么意思)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)