问:自定义运行时异常,怎么样才能像API中那些运行时异常那样,自动抛出,我写自定义运行时异常时,总是要自己主动throw,才会抛出。

例如:运行下面代码时,控制会自动显示异常信息

java在try中主动抛出异常 java 主动抛异常_运行时异常

java在try中主动抛出异常 java 主动抛异常_异常信息_02

 

答: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);
    }
}