一、可以自定义异常类吗?

  • SUN公司提供的jdk内置的异常类肯定是不够用的,在实际开发中,有很多的业务出现异常后,jdk都是没有和业务挂钩的,所以就要我们自定义异常类了。

二、怎么自定义异常类?

  1. 编写一个类继承Exception(发生概率高,编译时异常)或RuntimeException(发生概率低,运行时异常)
  2. 提供俩个构造方法,一个无参,一个带string参数的

// 业务逻辑异常
//定义一个登陆异常类RegisterException:
public class RegisterException extends Exception {
/**
* 空参构造
*/
public RegisterException() {
}

/**
*
* @param message 表示异常提示
*/
public RegisterException(String message) {
super(message);
}
}

三、怎么使用自定义异常类

  1. 手动抛异常可以终止程序(throw)
  2. throw new 异常对象

//模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。
public class Demo {
// 模拟数据库中已存在账号
private static String[] names = {"bill","hill","jill"};

public static void main(String[] args) {
//调用方法
try{
// 可能出现异常的代码
checkUsername("nill");
System.out.println("注册成功");//如果没有异常就是注册成功,有异常就不会执行这一句
}catch(RegisterException e){
//处理异常
e.printStackTrace();
}
}

//判断当前注册账号是否存在
//因为是编译期异常,又想调用者去处理 所以声明该异常
public static boolean checkUsername(String uname) throws LoginException{
for (String name : names) {
if(name.equals(uname)){//如果名字在这里面 就抛出登陆异常
throw new RegisterException("亲"+name+"已经被注册了!");
}
}
return true;
}
}

注:重写的方法不能比重写前的方法抛出更多的异常。(抛出异常的范围不能比之前的大)