package com.ydlclass.CustomizationException;

public class UsernameException extends RuntimeException{ private int code;//自己添加了一个成员变量

public UsernameException(){

}

public UsernameException(String message, int code) {//按住alt+e快捷键可以使用RuntimeException这个类的构造器
    //并且实现的时候可以将我们的定义的成员变量添加到这个构造器之中
    super(message);
    this.code = code;
}

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}

}

package com.ydlclass.CustomizationException;

public class PasswordErrorException extends RuntimeException{

}

package com.ydlclass.CustomizationException;

import java.util.Scanner;

public class Client {
    public static void fun1(){
        fun();
    }
    public static void fun(){
        Scanner scanner = new Scanner(System.in);
        String username = scanner.next();
        if(!"abc".equals(username)){
            throw new UsernameException("用户名错误",504);//这个字段可能需要我们创建时就维护
        }
        Scanner scanner1 = new Scanner(System.in);
        String passsword = scanner1.next();//注意类型
        if(!"123".equals(passsword)){
            throw new PasswordErrorException();
        }
    }
    public static void main(String[] args) {
        try{
            fun1();
        } catch (UsernameException e){//分别捕获不同的异常
            e.printStackTrace();//当异常被捕获后使用这个方法来打印异常信息的这种方式,不会将程序打断掉。不同于jvM所抛出的异常
            System.out.println(e.getCode());//由于自定义的异常添加了一个code的字段,使用这个字段可以用于标记我们想要的自定义数字
            System.out.println(e.getMessage());//可以使用这句话来代替下面的内容
//            System.out.println("用户名出现错误");
        } catch (PasswordErrorException e){//业务的异常问题
            e.printStackTrace();//这个可以打印在我们的日志文件中,可以便于查找

            System.out.println("用户密码出现错误");
        }
    }
}