网站首页 > java教程 正文
自定义异常
Java 提供相当多的异常类,尽量使用它们而不要创建自己的异常类
如果遇到一个不能用预定义异常类恰当描述的问题,那就可以通过派生 Exception类或其子类,例如,IOException类,来创建自己的异常类。
可以先从JDK中自带的异常类来学习如何创建自己的异常类:
- 该类从RuntimeException类来继承,因此该异常属于unchecked exception,可以不使用try-catch结构来处理。
- 其次,包含了一个长整型的成员变量serialVersionUID,该变量主要在Java的序列化中使用,序列化机制通过判断类的serialVersionUID值来验证实体类的版本一致性,该值一般自动生成
- 第三,该类定义了两个构造方法,其中一个是无参数的默认构造方法,另外一个则是带有一个String类型参数的构造方法,参数用于存储具体的异常消息。通过throw来抛出异常时一般新建一个指定消息值的异常类对象。
实际上,不仅NullPointerException类的定义是这样的,绝大多数异常类的定义都是这么简单
在学习了JDK中异常类的源代码之后,我们接下来看看如何自定义异常类
如,我们已经有一个电动汽车类,我们需要有处理有关电力 不足的意外情况,
则可以设置一个异常类:OutOfEletricityException 自定义异常类
该异常类的定义也非常简单。该类包含了一个静态的长整型常量,以及两个构造方法。
OutOfEletricityException异常类属于checked exception,因此,如果在方法中未使用throws进行声明的话,就必须使用try-catch结构进行处理。
总结:
异常处理通常需要更多的时间和资源
- 异常出现在方法中。如果想让该方法的调用者处理异常,应该创建一个异常对象并将其抛出。如果能在发生异常的方法中处理异常,那么就不需要抛出或使用异常。
- 一般来说,一个项目中多个类都会发生的共同异常应该考虑作为一种异常类。对于发生在个别方法中的简单错误最好进行局部处理,无须抛出异常。
在代码中,应该什么时候使用 try-catch 块呢?
- 当必须处理不可预料的错误状况时应该使用它。
- 一般不要用 try-catch 块处理简单的、可预料的情况。
如:
- NullPointerException 是Java编程中出现次数非常高的异常,如果不是高居榜首的话,那至少也是名列前茅。
- 在对一个没有完成构建的对象(例如null值)调用方法或访问成员变量,就会抛出NullPointerException类型的异常。
- 该异常属于unchecked exception,因此不是必须使用try-catch结构进行处理。
实际上,在编程中更倾向于使用简单的if来进行判断,而不是使用try-catch结构来处理空
针异常:
- 哪些情况是异常的,哪些情况是可预料的,有时很难判断。
- 但有一点要把握住,不要把异常处理用作简单的逻辑测试。这种逻辑测试采用最简单的if结构即可完成,不需要使用复杂的异常处理来完成。
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)