然而,使用可變參數時,要注意幾個問題:
1) 可變參數方法與數組參數方法重載時
public class MethodParams{ //帶可變參數的方法 public void hello(String ...params) { System.out.println("執行帶可變參數的方法,參數個數為:" + params.length); } //帶數組參數的方法 public void hello(String[] params) { System.out.println("執行帶數組參數的方法,數組長度為:" + params.length); } }
我們寫個測試代碼運行一下看看結果如何:
MethodParams mp = new MethodParams(); mp.hello("AAA","BBB","CCC");
編譯時報錯:
MethodParams.java:7: 無法在 MethodParams 中同時聲明 hello(java.lang.String[]) 和 hello(java.lang.String...) public void hello(String[] params) { ^ 1 錯誤
結論: JDK不允許存在, 帶可變參數的方法和帶數組參數的方法在同一類中重載。
可變參數==數組參數? 在帶可變參數的方法體時,讀取可變參數列表時,就是以數組的方式來讀?。?/font>
帶可變參數的方法可以傳入一個數組參數,但帶數組參數的方法卻不能傳入可變參數。
2) 可變參數方法與可變參數方法重載時
//帶可變參數的方法 public void hello(String ...params) { System.out.println("執行帶可變參數的方法,參數個數為:" + params.length); } //帶固定參數和可變參數 public void hello(String param1, String ...params) { System.out.println("執行帶固定參數和可變參數的方法,參數個數為:" + params.length); }
測試代碼跟上例中一樣,編譯時報錯:
MethodParams.java:18: 對 hello 的引用不明確,MethodParams 中的 方法 hello(java.l ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String ...) 都匹配 mp.hello("AAA","BBB","CCC"); ^ 1 錯誤
結論:JDK不允許存在,帶相同參數類型列表(Type List)的參數列表的方法在同一類中重載。
3)可變參數方法與無參數方法重載時
//帶可變參數的方法 public void hello(String ...params) { System.out.println("執行帶可變參數的方法,參數個數為:" + params.length); } //不帶參數的方法 public void hello() { System.out.println("執行不帶參數的方法"); }
我們都知道,可變參數即可帶0個或者多個參數,如果帶0個參數即不帶參數時,JDK會怎么處理呢?
那我們就以執行"mp.hello()"來測試一下。編譯通過,運行正常,調用的還帶參數的hello()方法。
結論:當可變參數方法與不帶參數的方法重載時,JDK默認調用的是無參數的方法。若類中沒有定義無參數的方法,則會調用可變參數的方法。
提供給外部調用的cn.idchecker.check.Checker類的相關方法如下表:
方法 | 方法作用 | 參數及返回值 |
Checker(String num) | 構造方法 | 參數num為18位身份證號碼的字符串 |
boolean checkLength() | 驗證身份證長度是否正確 | 長度為18,則返回true,否則返回false |
boolean checkBirth() | 驗證出生生日碼是否合法 | 合法則返回true,否則返回false |
boolean checkAddr() | 驗證地址碼是否存在 | 存在則返回true,否則返回false |
boolean checkCheckCode() | 計算校驗碼是否正確 | 正確則返回true,否則返回false |
boolean check() | 總的身份證驗證,驗證順序:長度 -> 生日 -> 最后一位校驗碼 -> 地址 | 若遇到有一項目不合法即返回false,所有驗證通過才返回true。驗證后,可通過調用getErrorMsg()方法獲取錯誤信息 |
boolean checkAll() | 總的身份證驗證,驗證項目包括長度、地址、生日、最后一位校驗碼 | 身份證合法則返回true,否則false。驗證后,可調用getErrorMsgs()方法獲取錯誤信息集合 |
String getBirth() | 獲取出生年月日 | 返回“2010年01月12日”格式的生日字符串通串 |
String getAddr() | 獲取公民籍貫 | 返回籍貫字符串("xx省xx市xx縣”) |
String getSex() | 獲取性別 | 返回“男”或“女” |
String getErrorMsg() | 獲取錯誤信息 | 返回錯誤信息字符串 |
public Set<String> getErrorMsgs() | 獲取錯誤信息集合 | 返回錯誤信息集合 |
用法舉例 1 :解壓縮“idchecker.zip”,將其目錄下的“idchecker.jar” 包引進Java Project中,以下是測試程序:
運行結果:
用法舉例 2 :將“idchecker.jar” 包引進到Web Project的lib目錄下,以下是測試程序:
運行結果: