Java自定义异常类
一.前言
1.什么是自定义异常类
在开发中根据自己业务的异常情况来定义异常类。
2.为什么要自定义异常类
虽然JDK中定义过异常类,但是我们在实际的开发中会碰到很多奇奇怪怪的需求,当程序出现异常的时候,我们要根据实际的业务去抛出异常,这时候JDK中的异常类已经无法满足我们了,就需要我们自己去定义异常类了。
3.异常类如何定义
我们可以继承于java.lang.Exception自定义一个编译期异常。
我们可以继承于java.lang.RuntimeException自定义一个运行时期的异常类。
二.代码实现
我们模拟登录操作,如果用户账号或者密码不正确,则抛出异常并给予一些温馨提示。
1.编写LoginException类
首先定义一个登陆异常类
package com.temperature.humidity.system.exception;
/**
* 登录异常
*/
public class LoginException extends Exception {
/**
* 空参构造
*/
public LoginException() {
}
/**
*
* @param message 表示异常提示
*/
public LoginException(String message) {
super(message);
}
}
2.编写Demo测试类
模拟登陆操作,我们使用Map模拟数据库中存储的数据,并提供当前用户是否存在方法用于判断。
package com.temperature.humidity.system.exception;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 自定义异常测试类
*/
public class Demo {
/**
* 定义一个map用于存储用户信息
* key存储用户的账号
* value存储用户的密码
*/
private static final Map<String, String> userMap = new LinkedHashMap<>();
/**
* 初始化一些用户的账号和密码
*/
static {
userMap.put("heyu", "123");
userMap.put("guodegang", "1234");
userMap.put("yuqian", "12345");
userMap.put("xiaolizi", "123456");
}
public static void main(String[] args) {
try {
//用户输入的账号和密码
String username = "heyu";
String password = "123";
checkUser(username, password);
System.out.println("用户" + username + "登录成功!");
//捕获LoginException异常
} catch (LoginException e) {
//打印异常信息
System.out.println("e = " + e);
}
}
/**
* 该方法用于检验用户的账号或者密码是否正确
*/
public static void checkUser(String username, String password) throws LoginException {
//通过传入的username为map的key查找对应的passwordDb
String passwordDb = userMap.get(username);
//如果密码为空或者是个空字符串,则抛出LoginException异常
if (passwordDb == null || "".equals(passwordDb)) {
throw new LoginException("用户" + username + "不存在,请重新登录!");
}
//如果传入的password和passwordDb不相等,则抛出LoginException异常
if (!passwordDb.equals(password)) {
throw new LoginException("用户" + username + "密码错误,请重新登录!");
}
}
}
三.测试
1.测试用户账号不存在
我们将账号改为xxx并将密码为123,可以看到后台打印出如下所示的文字,测试成功。
2.测试用户密码错误
我们将账号改为heyu并将密码为1238888,可以看到后台打印出如下所示的文字,测试成功。
3.测试用户登陆成功
我们将账号改为heyu并将密码为123,可以看到后台打印出如下所示的文字,测试成功。