Java中的自定义异常

Java中的自定义异常

一、为什么要自定义异常

  • 让异常有语义
  • 例如:一个学生的年龄是6-80岁 如果输入的年龄不符合要求 就抛出一个自定义异常AgeException 这样就能清楚的了解异常类型
class Student{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {

        if (age < 6 || age > 80){
            //不使用Sysout的方法 因为使用这样的方法不能打印堆栈信息
            //System.out.println("年龄不合法");

            //应该使用抛出异常的方法

            //不使用Exception 这是受检异常 必须try-catch或者throw 侵入性太强 要改动的代码太多
            //throw new Exception("年龄不合法");

            //所以应该使用非受检异常
            //throw new RuntimeException("年龄不合法");

            //再提高要求:使用自定义异常 有异常语义
            throw new AgeException("年龄不合法");

        }
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

二、怎么自定义异常

  • 写一个异常类继承Exception 、RuntimeException
  • 添加一个错误的编码
  • 重写toString 方法使错误编码输出
class AgeException extends RuntimeException{

    //错误编码
    private int cood = 101;

    //构造方法:一定要有错误信息 不提供空参构造方法
    public AgeException(String message){
        super(message);
    }

    @Override
    public String toString() {
		//堆栈信息在异常里是用StackTraceElement存储的
		//异常类中的getStackTrace()方法是获取一条堆栈信息
		//所以用StackTraceElement[] 数组获取所有的堆栈信息
        StackTraceElement[] stackTraceElements = super.getStackTrace();
        //使堆栈信息转换成字符串
        String s = "";
        for ( StackTraceElement st : stackTraceElements){
            s += stackTraceElements.toString()+"\t";
        }
        return "AgeException{" +
                "cood=" + cood +"\n"+s+
                '}';
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值