本文目錄一覽:
高級Java什麼是可變參數?
1.5版本的新特性,就是想定義一個方法,但是不知道以後要用的時候想傳幾個參數進去,比如求和,你想定義一個傳幾個int數據都能給你算出和的方法,可以在方法的參數列表中這樣寫(參數類型… 數組名),然後在方法內部直接用操作數組的方式操作。在調用的時候可以隨便傳幾個參數進去,JVM都能將這些數據封裝成一個數組,然後按照方法內的操作進行操作。
舉我上面說的求和的例:
public static int Sum(int… arr){
int sum=0;
for(int i=0;iarr.length-1;i++){
sum+=arr[i];
}
return sum;
}
使用可變參數的一個注意:可變參數的定義,必須是放在參數列表的最後面,否則編譯失敗.
java編程可變參數
將 int sum = 0; 改成 int sum = n1;
class Test{
public static void main(String[] args){
System.out.println(add(2));
System.out.println(add(2,3));
System.out.println(add(2,3,4));
}
public static int add(int n1,int… n){
int sum = n1;
for(int i=0;in.length;i++){
sum = sum+n[i];
}
return sum;
}
}
…的Java中可變參數的符號
在編寫一個方法時,其參數隨著程序運行的條件而變化,在編譯期間無法確定。具體地講,例如編寫一個列印參加聚會party的程序,其中方法printInvitation()將根據作為參數的參加人姓名,列印邀請卡。但這個參數的數量事先並不確定。當然可以編寫許多重載的方法來解決這個問題,如:
void printInvitation(String name);
void printInvitation(String name1, Stringname2);
void printInvitation(String name1, Stringname2, String name3);
問題是編寫多少個重載的方法才可以解決給所有參加者列印邀請卡?也許需要改變您的程序設計,而使用數組或者鏈接表了。
應用可變參數可以方便、靈活地解決這類問題。例如:
void printInvitation(String…names) {
for (String name : names) {
makeCard(name); //調用方法按照姓名列印邀請卡
System.out.println(Recording info: invitation card has been printed for + name);
}
}
這裡,(String…names)便是可變參數。它包括從0到任意個相同類型的參數。在編譯期間,這個可變參數將被轉換為字元串數組形式,即:void printInvitation(String names).
如下是調用這個方法的例子:
printInvitation(李剛, David Smith);
printInvitation(Greg Wu, Paul Nguyen, Liu Wei, 張新);
printInvitation(); //無參數
當在無參數情況下調用這個方法時,將不執行任何這個方法中的代碼。
如下是運行結果:
Recording info: invitation card has been printed for 李剛
Recording info: invitation card has been printed for David Smith
Recording info: invitation card has been printed for Greg Wu
Recording info: invitation card has been printed for Paul Nguyen
Recording info: invitation card has been printed for Liu Wei
Recording info: invitation card has been printed for 張新
如何通過java 反射 調用一個 含有 可變參數的 方法呢 ??
java反射調用可變參數的方法的方式是傳入objects參數,如下代碼:
public class Reflect {
public static void main(String[] args) throws Exception {
Class? clazz = Single.class;
Single single = (Single) clazz.newInstance();
ListString list = new ArrayListString(){
private static final long serialVersionUID = 1L;
{
add(“fuck”);
add(“ni”);
add(“mei”);
}
};
//獲取method兩種方式, 在method中 數組的的空間大小是可以隨便寫的不一定使用0
/* 1 */
Method method = clazz.getDeclaredMethod(“method”, Array.newInstance(Object.class, 0).getClass());
/* 2 */
method = clazz.getDeclaredMethod(“method”, (new Object[0]).getClass());
//初始化參數
/* 1 */
Object objs = Array.newInstance(Object.class, 2);
Array.set(objs, 0, list);
Array.set(objs, 1, “23”);
method.invoke(single, objs);
/* 2 */
Object[] objects = {1, “fuck”, list};
method.invoke(single, new Object[]{ objects });
}
}
class Single {
public void method(Object… objs) {
System.out.println(Arrays.deepToString(objs));
}
}
結果:
[[fuck, ni, mei], 23]
[1, fuck, [fuck, ni, mei]]
java 可變參數是什麼?
java 可變參數是1.5版本的新特性,也就是說用戶若是想定義一個方法,但是在此之前並不知道以後要用的時候想傳幾個參數進去,可以在方法的參數列表中寫參數類型或者數組名,然後在方法內部直接用操作數組的方式操作。
擴展資料
java可變長的形參聲明格式:dataType…parameters。
其中,省略號表示數據類型為dataType的parameters參數個數不固定的,可為任意個。此外,在方法調用時,變長形式參數可被替換成1個、2個或多個參數。在編譯時,方法的變長參數將被看成具有相同類型的一維數組。
在java語言開發中,從JDK1.5以後,java允許定義形參長度可變的參數從而允許為方法指定數量不確定的形參。
參考資料:java形參長度可變方法-百度百科
原創文章,作者:JNT2H,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130506.html