问:自定义运行时异常,怎么样才能像API中那些运行时异常那样,自动抛出,我写自定义运行时异常时,总是要自己主动throw,才会抛出。
例如:运行下面代码时,控制会自动显示异常信息
答:API中那些异常也是API的作者自己主动抛出,跟自己写的自定义异常一样。如果别人用你写的代码当API调用,他也会觉得你定义的异常是自动抛出的。Java中的任何异常都是throw主动抛出的。
实现运行时异常抛出步骤
1、自己定义一个异常类
2、当你想要在控制台显示对应异常信息时,就throw new 异常类();
public class Demo {
public static void main(String[] args) {
//运行时,当调用这个方法,程序会进入对应的else if里面,就会创建一个异常类对象,并抛出,
//JVM收到这个对象,就会在操作台显示异常信息
judgeAgeRuntime(-1);
//输入这行代码就会出错,因为该方法在声明就抛出编译时异常,
// 表示该方法可能有异常,当我在方法里不想自己处理,让调用该方法的人去处理,
// 所以必须有人用try-catch手动接收并处理异常,否则编译不会通过
judgeAge(10);
}
public static void judgeAgeRuntime(int age){
//判断传入的年龄是否合法
if (age > 150){
//不合法的年龄
throw new IllegalAgeRuntimeException("你活不了那么大岁数,你就是普通人");
}
else if (age < 0 ){
//不合法的年龄,用了异常类的有参构造方法
throw new IllegalAgeRuntimeException("你的年龄不可能是负数");
}
}
public static void judgeAge(int age) throws IllegalAgeException {
//判断传入的年龄是否合法
if (age > 150){
//不合法的年龄
throw new IllegalAgeException("你活不了那么大岁数,你就是普通人");
}
else if (age < 0 ){
//不合法的年龄
throw new IllegalAgeException("你的年龄不可能是负数");
}
}
}
//自定义的年龄不合法运行时异常类
//一定要继承RuntimeException
class IllegalAgeRuntimeException extends RuntimeException{
//里面的内容就模仿JDK自带的异常类内容就行了,不清楚原理
public IllegalAgeRuntimeException() {
super();
}
//每个异常类的构造方法都可以显式传入一个字符串,表示异常信息(原因)的说明
public IllegalAgeRuntimeException(String message) {
super(message);
}
}
//自定义的年龄不合法编译时异常类
//一定要继承RException
class IllegalAgeException extends Exception{
public IllegalAgeException() {
super();
}
public IllegalAgeException(String message) {
super(message);
}
}