1. 程式人生 > >JsonLiang’s blog

JsonLiang’s blog

說到不定長引數方法,其實有一個非常常用的方法,大家都用過的那就是main方法。下面就一起來看看不定長引數方法的demo;
package com;

public class UnfixedParameter {
public static void main(String[] args) {
testOne(new String[]{});
testOne(new String[]{"a","b","c"});
testTwo();
testTwo("a","b","c");
}

public static void testOne(String[] args){
for(String arg : args){
System.out.println(arg);
}
}

public static void testTwo(String... args){
for(String arg : args){
System.out.println(arg);
}
}
}

我們可以看出無論用String[]方式還是String...方式其實本質都是傳入的一個字串陣列。這裡還可以看出這種不定長引數方法的傳參個數為>=0個。如果你希望必須傳入一個或多個引數,那麼可以在其前面新增引數(不能在後面新增,否則編譯不通過),例如:
public static void test(int i,String par,String... args){}

不定長引數方法方法過載:
package com;

public class UnfixedParameter {
public static void main(String[] args) {
test(new String[]{});
test(new String[]{"a","b","c"});
test();
test("a","b","c");
}

public static void test(String... args){
for(String arg : args){
System.out.println(arg);
}
}

public static void test(String par,String... args){
System.out.println(par);
for(String arg : args){
System.out.println(arg);
}
}
}

你一定會發現test("a","b","c")編譯不通過。因為編譯器無法確定你呼叫的是哪個方法。這裡我故意給第一個方法傳入的是String[]型別,上面我已經說過String[]和String...方式本質都是傳入一個字串陣列,所以寫成同名方法的話不叫方法過載,會導致編譯報錯。這裡test(new String[]{})和test(new String[]{"a","b","c"})一定呼叫的是第一個方法,而test("a","b","c")無法確定呼叫的是哪個方法。因為你可以把第二個方法當成是傳入一個字串和一個字串陣列,也可以當成傳入>=1個字串。
總結:
1.兩種方式本質都是傳入的字串陣列,所以不能同時出現,否則編譯無法通過
2.String...引數必須放在最後面,否則編譯無法通過
3.第一種方式(即String[]方式)可以使用方法過載,第二種方式(即String...方式)使用方法過載時,呼叫方法時會編譯不通過(引數個數為0個的時候除外)
原文永久地址:[url]http://jsonliangyoujun.iteye.com/blog/2364491[/url]