概述:根据自己业务的异常情况来定义异常类
异常类如何定义:
1、定义一个编译期异常:自定义类并继承于java.lang.Exception
2、自定义一个运行期异常类:自定义类并继承java.lang.RuntimeException
格式:
public class XXXException extend Exception/RuntimeException{
添加一个空参的构造方法
添加一个带异常信息的构造方法
}
注意:
1、自定义异常类一般都是以Exception结尾,说明该类是一个异常类
2、自定义异常类,必须继承Exception或者RuntimeException
Exception:是编译期异常,如果方法内部出了该异常就必须处理
RuntimeException:是运行期异常,无需处理,给JVM
通过查看源码发现:所有的异常类都会有一个带异常信息的构造方法,方法内部会调用父类带异常信息的构造方法,让父类来处理这个异常信息
演示:
异常类:
演示:
异常类:
public class RegisterException extends RuntimeException/Exception{
空参
public RegisterException(){
super();
}
带参
public RegisterException(String message) {
super(message);
}
}
使用:编译期异常
static String[] usernames = {"张三", "李四", "王五"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name = sc.next();
checkUsername(name);
}
public static void checkUsername(String name) {
for (String username : usernames) {
if (name.equals(username))
try {//这里可以直接throws,让main方法来try-catch
throw new RegisterException("该用户被注册");
} catch (RegisterException e) {
e.printStackTrace();
return;//结束方法
}
}
System.out.println("恭喜注册成功");
}
运行期异常checkUsername方法中不用处理异常
public static void checkUsername(String name) {
for (String username : usernames) {
if (name.equals(username))
throw new RegisterException("该用户被注册");
}
System.out.println("恭喜注册成功");
}
效果: