java可变参数

  • 2016-04-13
  • 浏览 (33)

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

例如 public void test(String ...args){...} 这里test方法可以传入参数的情况是:
1.不使用参数,如test()
2.使用一个或多个参数,如test("1"); test("1","2");
3.使用数组 test(new String[]{"1","2"});

在test方法内部,我们可以像使用数组的访问方式一样来访问参数args.如:args[i] 这样就有一个好处,在参数输入不定的情况下,使用这个方法非常简单。非常易于使用。

可变参数的特点:
1、只能出现在参数列表的最后;
2、...位于变量类型和变量名之间,前后有无空格都可以;
3、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

有几点需要注意的就是 :
1、我们见到的是可变参数,其实编译器编译之后它会将这个test(String ...args){...} 编译成为数组调用的方式test(String[] args){} ,这个过程是编译中就完成了的,我们程序编写过程中看不到这个实际的转换过程。而我们调用这个test方法时,编译器同样会把参数转换成new String[]{""}的形式调用,所以,本质上来讲,就是一个以数组为参数的调用方法,我们看不到而已,具体详细情况可以反编译class类就可以明了。
2、如果同时同一个类中还有一个test方法,例如test(),或者test(String args) ,我们采用 test("1")的方式调用,我们就可以知道了,因为有这个方法存在,所以编译器就会优先使用这个 test(String args)    方法,而不会使用可变参数的方法,这个原因很明确,因为可变参数本质上是一个数组为参数的方式。所以,如果你定义了一个可变参数的test方法,如果你再定义一个test(String[] args)的以数组为参数的方法,编译器就会提示你方法定义重复。道理就在这里。
正文到此结束