主题:jdk5.0之不定长参数
我的网址:www.javaedu.com.cn
QQ:2535279
在J2SE5.0之前,当一个方法要使用不定长度的参数时,就需要你先建立一个数组,然后把值赋给数组,将数组做为参数,传递
给方法.
在J2SE5.0之后,出现了Varargs这个新特性,可以支持不定长度的参数(Variable-length Argument),这就可以帮您轻松解决
不定长度参数的问题.
那么,如何来使用不定长度参数呢?1.在参数类型和参数名之间使用"..."(记住,三个英文的点,不要忘记噢!),表示该参数是
可变长的.
2.你可以使用增强的for循环来读取可变长度参数中的值,但笔者试了一下,使用传统的for循环也可以读取的,但一定要加上
参数长度的判断
3.在一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最后一项(到底是为什么,我
们等一下再来讨论)
下面先来看个例子:
import java.util.Scanner;
public class Test {
public static void main(String[] args){
println("Hello!");
println("Good","morning!");
println("Welcome","to","Shanghai!");
}
public static void println(String... infos){
for(String info:infos)
{System.out.print(info+" ");}
System.out.println();}
}
将其中增强的for循环换成传统的for循环也是可以的.
for(int i=0;i<infos.length;i++)
System.out.print(infos[i]+" ");
其实,不定长度的参数的传递也是采用数组形式,但是Varargs新特性自动隐藏了这个过程,对开发人员屏蔽了其中的细节.
接下来,我们讨论一下,为什么一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最
后一项呢.这样说吧,
假如我们这样定义了函数 public static void println(String... infos,int num),那么在编译的时候,系统将不知道前
面的不定长度参数有多长,哪个地方是下一个参数num的开始.同样,如果在一个参数列表中使用两个不定长度参数,那么编译
器也不知道从何处开始下一个参数.
总的来说,有了Varags这个新特性后,你就不再需要重载不定长度参数的方法了,也不必为该调用哪个重载的方法而对着参数
数来数去了.
QQ:2535279
在J2SE5.0之前,当一个方法要使用不定长度的参数时,就需要你先建立一个数组,然后把值赋给数组,将数组做为参数,传递
给方法.
在J2SE5.0之后,出现了Varargs这个新特性,可以支持不定长度的参数(Variable-length Argument),这就可以帮您轻松解决
不定长度参数的问题.
那么,如何来使用不定长度参数呢?1.在参数类型和参数名之间使用"..."(记住,三个英文的点,不要忘记噢!),表示该参数是
可变长的.
2.你可以使用增强的for循环来读取可变长度参数中的值,但笔者试了一下,使用传统的for循环也可以读取的,但一定要加上
参数长度的判断
3.在一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最后一项(到底是为什么,我
们等一下再来讨论)
下面先来看个例子:
import java.util.Scanner;
public class Test {
public static void main(String[] args){
println("Hello!");
println("Good","morning!");
println("Welcome","to","Shanghai!");
}
public static void println(String... infos){
for(String info:infos)
{System.out.print(info+" ");}
System.out.println();}
}
将其中增强的for循环换成传统的for循环也是可以的.
for(int i=0;i<infos.length;i++)
System.out.print(infos[i]+" ");
其实,不定长度的参数的传递也是采用数组形式,但是Varargs新特性自动隐藏了这个过程,对开发人员屏蔽了其中的细节.
接下来,我们讨论一下,为什么一个方法的参数列表中只能使用一次不定长度参数,且不定长度参数只能出现在参数列表的最
后一项呢.这样说吧,
假如我们这样定义了函数 public static void println(String... infos,int num),那么在编译的时候,系统将不知道前
面的不定长度参数有多长,哪个地方是下一个参数num的开始.同样,如果在一个参数列表中使用两个不定长度参数,那么编译
器也不知道从何处开始下一个参数.
总的来说,有了Varags这个新特性后,你就不再需要重载不定长度参数的方法了,也不必为该调用哪个重载的方法而对着参数
数来数去了.