Java学习25--自定义异常

自定义异常class

自定义异常通常要配合 override “toString”命令,其实质是一个会报错的method,像一个交通违章通报LED,但何时被触发,如何算是违反交通,并不会在此class定义。

  1. 自定义异常class的步骤:
  • 自建个异常类,继承自Exception总父类
  • 类里面处理一些你觉得可能会出现异常的问题
  • 最后把这个消息打印出来(toString)
注意这里的toString是继承自总类Object class下面的toString method,由用户在本级完成override,一般构建自定义异常在这一步都会用到toString method来帮忙输出提示个性化的信息。

比如新建一个叫做report_age_error的用户自定义exception,如果用户输入了0-130以外的年龄,那么我们就触发这个自定义exception class。

注意自定义exception仅仅是定义“通告批评”的内容,而不是在定义何人何时何地为什么会被“通告批评”。


package exception.demo02;

public class report_age_error extends Exception{
    private int p_age;
    public report_age_error(int age) {
        this.p_age=age;
    }

    @Override
    public String toString() {
        return "输入值为:"+p_age+",输入不合法.";
    }

}

常用的IDEA快捷键:

  • Alt+Insert打开构造器constructor
  • 遇见红色波浪线,按住alt+enter,看报错提示。

使用自建的自定义异常class

刚刚建立好了自定义异常class,现在来构建判断异常被激活的method。
上一步建立了“通告批评公示内容”,现在来建立一个”通告批评被触发“的规则(这一步一般会出现 if XXX语句)。

比如定义了一个叫做checkage的method,位于valid_age_detect class文件之内,checkage method的功能是当age超过130或者小于0时,触发刚才建立的report_age_error class,或者age为正常范围时,就打印输出“正常”。


package exception.demo02;

public class valid_age_detect{
    //定义一个“checkage” method,用来检查输入的年龄是否合法
    public static void checkage(int age) throws report_age_error {
        if (age > 130 || age <= 0) {
            throw new report_age_error(age);
        } else {
            System.out.println("输入的年龄:" + age + "已录入。");
        }
    }
}

Tips: 如果碰到了“Unhandled exception”错误
如果在main方法中捕获了一个异常并且直接再次抛出它,main方法本身就需要声明抛出这个异常。main方法是程序的入口点,所以如果没有其他代码来调用main方法并处理这个异常,那么当main方法抛出异常时,Java运行时环境就会认为这是一个未处理的异常,并报告错误。
要解决这个问题,你有几个选择:

  • 在main方法上声明抛出异常(使用throws关键字)
  • 在catch块中处理异常:你可以在catch块中记录错误信息、打印错误消息给用户、或者采取其他恢复措施。而不是直接抛出它。
    类似这样
try {  
    // ...  
} catch (MyErr e) {  
    System.err.println("发生错误: " + e.getMessage());  
    // 其他处理逻辑  
}

下面用main模块来使用上面自建的checkage method和report_age_error class。


package exception.demo02;

public class Test
{
    public static void main(String[] args) throws report_age_error{
	
	     try {valid_age_detect.checkage(50);

        } catch (report_age_error e) {
            throw e;
        }
	
	
        try {valid_age_detect.checkage(150);

        } catch (report_age_error e) {
            //e.printStackTrace();可以用这一行直接打印错误提示信息
            throw e;
			//如果在这里想要用throw e 自定义的exception_object,必须要main程序在标题throws声明 自定义的report_age_error class文件:
			//类似这样 main(String[] args) throws report_age_error{...}
			//否则编译通过不了
			
        }
    }

}


输入的年龄:50已录入。
Exception in thread "main" 输入值为:150,输入不合法.
	at exception.demo02.valid_age_detect.checkage(valid_age_detect.java:7)
	at exception.demo02.Test.main(Test.java:39)

Process finished with exit code 1

程序中使用user_exception class的步骤:

  • 创建自定义user_exception class(一定要继承系统自带的exception class!!!)
  • 在method内部写throw关键字抛出exception object
  • 如果在当前抛出exception的method里处理exception,可以使用try catch捕获并处理。否则就在method的声明处(method 名字旁边)通过throws关键字,并且写上要抛出给method调用方的exception,继续进行下一步操作
  • main方法为一般为最高阶,如果已经自定义了异常类,在main里想throw这个自定义异常,需要在main方法签名处利用throws声明这个异常类。
  • main主程序通过调用method捕获并处理异常
  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值