本文小編以用戶登錄爲例,進行異常處理。
首先新建實體類User.java:
/**
* Created by why_768 on 2017/2/16.
*/
public class User {
int id;
String email;
String pwd;
public User(){
}
public User(int id,String email,String pwd){
super();
this.id=id;
this.email=email;
this.pwd=pwd;
}
@Override
public String toString(){
return id + "," + email;
}
@Override
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(this == obj){
return true;
}
if(obj instanceof User){
User o=(User)obj;
return id == o.id;
}
return false;
}
@Override
public int hashCode(){
return id;
}
}
然後新建兩種聲明式異常:
/**
* Created by why_768 on 2017/2/16.
* 該類表示用戶已經註冊過異常
*/
public class UserExistsException extends Exception{
public UserExistsException(String message){
super(message);
}
}
/**
* Created by why_768 on 2017/2/16.
* 該類表示用戶或密碼錯誤異常
*/
public class EmailOrPwdException extends Exception {
public EmailOrPwdException(String message){
super(message);
}
}
創建用戶管理類UserManager:
import java.util.HashMap;
import java.util.Map;
/**
* Created by why_768 on 2017/2/16.
*/
public class UserManager {
//存儲對象的集合,key是email,value是用戶
private Map<String,User> users=new HashMap<String, User>();
private int id=1;
public User reg(String email,String pwd) throws UserExistsException{
if(users.containsKey(email)){
throw new UserExistsException("該郵箱" + email + "已存在");
}
User user=new User(id++,email,pwd);
users.put(email,user);
return user;
}
public User login(String email,String pwd) throws EmailOrPwdException{
if(!users.containsKey(email)){
throw new EmailOrPwdException("無此用戶!");
}
User user=users.get(email);
if(!user.pwd.equals(pwd)){
throw new EmailOrPwdException("密碼錯誤!");
}
return user;
}
}
建立測試類:
public class Main {
public static void main(String[] args) throws Exception{
UserManager mgr=new UserManager();
User user=mgr.reg("[email protected]","123");
System.out.println("註冊成功!");
//測試1,重複註冊,出現異常
user=mgr.reg("[email protected]","123");
//測試2,登錄密碼錯誤,出現異常,密碼不對
user=mgr.login("[email protected]","1233");
//測試3,登錄成功!
User someone=mgr.login("[email protected]","123");
System.out.println(someone);
}
}
總結:
代碼調用拋出異常的方法,必須處理異常,有兩種方式:
1、使用try catch finally 捕獲
2、直接再拋出異常
處理異常的方式依賴具體業務邏輯,可靈活處理。