Java之自定義異常

鄭清發表於2018-08-27
/*
 * 自定義異常:自己宣告一個類,繼承Exception
 */
public class Demo {
	//這裡我們使用陣列模擬資料庫 進行 自定義異常處理
	static String[] userNames = {"張三","李四","王五","週週"};
	
	public static void main(String[] args) {
		try {
			regist("張三"); //使用使用者名稱:阿發  進行註冊
			System.out.println("註冊成功!!進入登陸頁面"); //如果呼叫註冊方法沒有出現異常,則會往下執行,進入登陸頁面
			System.out.println(Arrays.toString(userNames));
		} catch (UsernameException e) {
			System.err.println("請重新註冊,原因:"+e.getMessage());//如果呼叫註冊方法出現了異常,則會直接執行catch:重新註冊
		}
	}

	public static void regist(String username) throws UsernameException{
		for (String n : userNames) {  //遍歷userNames陣列中的每一個元素
			if(username.equals(n)){  //把遍歷出來的元素依次與name相比較。   name是使用者註冊的使用者名稱
				/*
				 * 表示使用者名稱重複了,不能往下執行:選擇使用丟擲異常的方式結束當前方法,建議使用自定義異常
				 * 自己在方法體中拋異常。  使用:throw 異常物件;
				 * 效果:方法體中使用throw丟擲的異常物件,拋給了當前方法
				 */
				throw new UsernameException("使用者名稱重複!!");
			}
		}
		//for執行結束if都沒有執行,說明使用者名稱肯定不重複
		/*
		 * 處理方式:把name新增到userNames陣列中
		 * 步驟 1.  把userNames陣列的容量擴大1個
		 * 	   2.  把name賦值給userNames陣列的最後一個元素
		 * 
		 *  copyOf(源陣列,新陣列的長度):  效果:先建立一個指定長度的新陣列,從源陣列中複製所有元素,貼上到新陣列中
		 * 	該方法的返回值 就是 新陣列
		 */
		userNames = Arrays.copyOf(userNames, userNames.length+1); //把userNames陣列容量擴大一個
		userNames[userNames.length-1] = username; //把使用者註冊的使用者寫入userNames陣列中
	}
}
/*
 * UserException繼承Exception  ==》 可以理解為:UserException就是Exception
 */
class UsernameException extends Exception{
	public UsernameException(String message){ //給異常資訊賦值
		super(message);
	}
}

執行結果圖:

相關文章