异常高级 - 自定义异常

  • 异常的分类

在这里插入图片描述

  1. 运行时异常,无需用trycatch包起来。运行时异常是调用方法时都有可能发生异常,如果都需要trycatch明显不合理。
  2. 按ctrl按钮进入源代码即可查看是否需要每次都用try/catch包裹,继承自runtimeException是运行异常,check异常是继承自Exception.
  3. try/catch包裹因为有时出现异常需要自己进行处理。
  • 自定义异常

自定义异常,通常用来说明我们程序中的业务逻辑问题。
注意事项:

  1. 类名见名知意
  2. 继承Exception(直接或间接均可)
  3. 要定义序列化版本号
  4. 重写父类的构造方法

自定义异常类。继承异常类,重写所有构造方法。

public class IllegalAgeException extends Exception {
    
    

	//版本号
    static final long serialVersionUID = 1L;

    public IllegalAgeException() {
    
    
    }

    public IllegalAgeException(String message) {
    
    
        super(message);
    }

    public IllegalAgeException(String message, Throwable cause) {
    
    
        super(message, cause);
    }

    public IllegalAgeException(Throwable cause) {
    
    
        super(cause);
    }

    public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    
    
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

在对年龄传值时添加限制

public class Person {
    
    
    private String name;
    private int age;

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) throws IllegalAgeException {
    
    
        if (age < 0 || age > 120){
    
    
            /*
            * 根据业务需求,可以在age值不符合要求时
            * 主动抛出异常,表示程序中这样的赋值不被允许
            * throw关键字后面实例化一个异常对象,当前代码会发生这个类型的异常
            * 当前方法会在运行throw后终止,类似return
            * */
            throw new IllegalAgeException("年龄不合法");
        }
        this.age = age;
    }
}

调用方法,抛出异常

public class ThrowDemo {
    
    
    public static void main(String[] args) {
    
    
        Person p = new Person();
        try{
    
    
            p.setAge(500);
        }catch (IllegalAgeException e){
    
    
            System.err.println(e.getMessage());
        }
        System.out.println(p.getAge());
    }
}

Guess you like

Origin blog.csdn.net/sinat_33940108/article/details/120900309