网站首页 > 博客文章 正文
Java标准库定义的常用异常包括:
Exception │ ├─ RuntimeException │ │ │ ├─ NullPointerException │ │ │ ├─ IndexOutOfBoundsException │ │ │ ├─ SecurityException │ │ │ └─ IllegalArgumentException │ │ │ └─ NumberFormatException │ ├─ IOException │ │ │ ├─ UnsupportedCharsetException │ │ │ ├─ FileNotFoundException │ │ │ └─ SocketException │ ├─ ParseException │ ├─ GeneralSecurityException │ ├─ SQLException │ └─ TimeoutException
当我们在代码中需要抛出异常时,尽量使用JDK已定义的异常类型。例如,参数检查不合法,应该抛出IllegalArgumentException:
static void process1(int age) { if (age <= 0) { throw new IllegalArgumentException(); } }
在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。
一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。
BaseException需要从一个适合的Exception派生,通常建议从RuntimeException派生:
public class BaseException extends RuntimeException { }
其他业务类型的异常就可以从BaseException派生:
public class UserNotFoundException extends BaseException { } public class LoginFailedException extends BaseException { } ...
自定义的BaseException应该提供多个构造方法:
public class BaseException extends RuntimeException { public BaseException() { super(); } public BaseException(String message, Throwable cause) { super(message, cause); } public BaseException(String message) { super(message); } public BaseException(Throwable cause) { super(cause); } }
上述构造方法实际上都是原样照抄RuntimeException。这样,抛出异常的时候,就可以选择合适的构造方法。通过IDE可以根据父类快速生成子类的构造方法。
小结
抛出异常时,尽量复用JDK已定义的异常类型;
自定义异常体系时,推荐从RuntimeException派生“根异常”,再派生出业务异常;
自定义异常时,应该提供多种构造方法。
【关键:
- 一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。BaseException需要从一个适合的Exception派生,通常建议从RuntimeException派生
- 自定义异常时,应该提供多种构造方法。
】
猜你喜欢
- 2024-10-02 这几个程序员博客型网站,让你快速成为编程大神
- 2024-10-02 开发中必须要掌握的 Git 技巧(git开发流程图)
- 2024-10-02 Github标星10.3K!这可能是最好的Java博客系统
- 2024-10-02 学习廖雪峰的JAVA教程---异常处理(Java的异常)
- 2024-10-02 学习廖雪峰的JAVA教程---异常处理(捕获异常)
- 2024-10-02 学习廖雪峰的JAVA教程---集合(使用Map遍历Map)
- 2024-10-02 学习廖雪峰的JAVA教程---异常处理(使用Commons Logging)
- 2024-10-02 学习廖雪峰的JAVA教程---异常处理(使用JDK Logging 日志调试)
- 2024-10-02 学习廖雪峰的JAVA教程---集合(使用TreeMap传入Comparator)
- 2024-10-02 学习廖雪峰的JAVA教程---泛型(擦拭法由编译器实现强制转型)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)