1.自定义异常格式
在程序中,可能会遇到任何标准异常类都没有充分的描述清楚的问题,这种情况下可以创建自己的异常类。
java中所有的异常类,都是继承Throwable,或者继承Throwable的子类。这样该异常才可以被throw抛出,因为异常体系具备一个可抛性,即可以使用throw 关键字。
自定义的类应该包含两个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。
自定义异常格式:
class 自定义异常名 extends Exception或RuntimeException {
public 自定义异常名() {
// 默认调用父类无参构造方法
}
public 自定义异常名(String msg) {
// 调用父类具有异常信息的构造方法
super(msg);
}
}
2.自定义异常使用
在 Person 类的有参数构造方法中,进行年龄范围的判断,若年龄为负数或大于130岁,则抛出
AgeOutOfBoundsException异常。
【示例】自定义异常使用案例
// 自定义异常类
class AgeOutOfBoundsException extends Exception {
// 无参构造方法
public AgeOutOfBoundsException() {}
// 有参构造方法
public AgeOutOfBoundsException(String msg) {
super(msg);
}
}
// Person类
class Person {
int age;
public Person(int age) throws AgeOutOfBoundsException {
// 判断年龄是否合法
if(age < 0 || age >= 130) {
throw new AgeOutOfBoundsException("年龄数值非法异常");
}
// 进行属性赋值
this.age = age;
}
}
// 测试类
public class MyException {
public static void main(String[] args) {
try {
// 初始化对象,可能会抛出AgeOutOfBoundsException异常
Person p = new Person(140);
System.out.println("age:" + p.age);
} catch (AgeOutOfBoundsException e) {
// 获取异常信息
System.out.println("msg:" + e.getMessage());
// 输出堆栈异常
e.printStackTrace();
}
}
}
自定义异常继承于Exception或继承RuntimeException的区别?
-
继承Exception属于非运行时异常,如果没有对其异常进行捕获处理(try-catch),那么必须在方法上声明异常(throws),以便告知调用者进行捕获。
-
继承RuntimeException属于运行时异常,方法上不需要声明异常(throws ),调用者也可以不捕获异常(try-catch)。代码一旦抛出异常,那么程序就会挂掉,并有JVM把异常信息显示到日志窗口上,让调用者看到异常并修改代码。
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。