package javaee.china.cxp;
import java.util.Arrays; import java.util.List;
import org.junit.Test;
/** * 2012年9月8日 * JDK1.5新特性 可变参数 * 可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。 * 因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数, * 所以只能让可变参数位于最后一项。 * 可变参数的特点: * (1)、只能出现在参数列表的最后; * (2)、...位于变量类型和变量名之间,前后有无空格都可以; * (3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。 */ public class Demo_6_VariablePparameters { @Test public void test_1(){ System.out.println(sumNumber(1,2,3,4,5,6)); } /** * * @param ...nums 可变参数 (下面方法中可以把...nums理解为数组) * @return 总和 * 理解:这样做的好处 个人理解拿 求和为例 ACM 或实际 用户输入的数不确定话 可以减少代码量让 * 程序可读性更强 * */ public int sumNumber(int ...nums){ int sum = 0; for(int i:nums){ sum += i; } return sum; } /** * Arrays.asList 方法实现了可变参数 * 测试 */ @Test public void test_2(){ List list = Arrays.asList("1","2","3","4","5"); System.out.println(list); String[] arrs = {"1","2","3","4","5"}; List list2 = Arrays.asList(arrs); System.out.println(list2); int[] intArrs = {1,2,3,4,5}; List list3 = Arrays.asList(intArrs);//说明asList方法必须传入的是对象 System.out.println(list3); } /** * 也可以将它实现为几个重载的方法,每个方法接受不同数量的int参数。 * 这样做有时可以令方法更容易使用,因为调用代码不需要首先创建一个数组。 * 以下三个重装方法可以给add(int... list) 这一个方法代替 */ public int add(int a, int b) { return a + b; }
public int add(int a, int b, int c) { return a + b + c; }
public int add(int a, int b, int c, int d) { return a + b + c + d; } /** * 如果只有少量值,这对于调用代码更为方便,因为现在可以使用add(12,14,16)来代替 * add(new int[] {12,14,16})。但是,编写类似这样的方法存在问题 * 需要为每种可能的参数组合编写不同版本 * 在Java 5中,可以编写一个方法以使它允许可变数量的参数并让编译器完成将列表包装到一个数组中的操作。 * 虽然内部仍是处理数组,但此时的编译器已隐藏了细节。以下的代码使用可变参数(vararg)重写了add方法。 */ public int add(int... list) { int sum = 0; for (int item : list) { sum += item; } return sum; } }