1>从JDK 1.5以后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。
定义形参个数可变的方法:
2>定义参数个数可变的方法:在方法最后一个形参的类型后面增加三个点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
3>测试:
package com.varpara.demo;
public class VarParameterDemo {
/*
*形参个数可变的方法
*从jdk 1.5以后,java允许形参个数可变的参数,从而为方法指定数量不确定的形参。
*/
public static void testVar(int n,String... books){
for(String book: books){
System.out.println(book);
}
System.out.println(n);
}
public static void testArray(int n,String[] books){
for(String book: books){
System.out.println(book);
}
System.out.println(n);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-------------形参个数可变的方法--------------");
String [] books={"C++","JAVA","C#"};
//调用形参个数可变的方法
testVar(3, "C++","JAVA","C#");
System.out.println("--------------");
//调用形参个数可变的方法时,可以为个数可变的参数传入一个数组
testVar(3, books);
System.out.println("-------------形参为数组的方法--------------");
testArray(3, books);
}
}
运行结果:
-------------形参个数可变的方法--------------
C++
JAVA
C#
3
--------------
C++
JAVA
C#
3
-------------形参为数组的方法--------------
C++
JAVA
C#
3
形参个数可变的参数本质就是一个数组参数,也就是说public static void testVar(int n,String... books)与public static void testVar(int n,String[] books)方法签名的效果完全一样。
区别是调用这两个方法时存在差别,对于形参个数可变的方法,调用方法时更加简洁,如下所示:
//调用形参个数可变的方法
testVar(3, "C++","JAVA","C#");
传入books的实参值无须是一个数组,但是如果采用数组形参来声明方法,调用时则必须传给该形参一个数组,如下所示:
testArray(3,new String[]{"C++","JAVA","C#"});
对比这两个方法,明显第一种方式更加简洁。
最后,数组形式的形参可以处于形参列表的任意位置,但是个数可变的形参只能处于形参列表的最后位置。也就是说一个方法中最多只能有一个个数可变的形参。