自定义异常
要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。
首先定义一个登陆异常类RegisterException:
// 业务逻辑异常
public class RegisterException extends Exception {
/**
* 空参构造
*/
public RegisterException() {
}
/**
*
* @param message 表示异常提示
*/
public RegisterException(String message) {
super(message);
}
}
模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。
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;
A、同步代码块
a. 格式:
synchronize(锁对象){ .... }
b. 说明:
非静态代码块锁对象是 this
静态代码块锁对象是 类名称.class
B、同步方法
a. 格式:
修饰符 synchronize 返回值类型 方法名称(参数列表){ ... }
b. 例如:
public synchronize void method(){ .... }
C、锁对象
a. 格式:
Lock mlock = new ReentrantLock(); //【1】定义成员位置(获取锁对象)
mlock.lock(); //【2】在数据变化前加锁(加锁)
mlock.unlock(); //【3】在数据变化后解锁(解锁)