A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是可变长参数?怎么使用可变长参数?请各位大侠指点下。。。

该贴已经同步到 ALAN__LEE的微博

6 个回复

倒序浏览
有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题,我们一般采用下面的方法:
1.重载,多重载几个方法,尽可能的满足参数的 个数。显然这不是什么好办法。
2.将参数作为一个数组传入。虽然这样我 们只需一个方法即可,但是,为了传递这个数组,我们需要先声明一个数组,然后将参数一个一个加到数 组中。
现在,我们可以使用可变长参数解决这个问题。
声明可变长参数方式如下:
public void mymethod (Stringarg1,Object… args)
也就是使用…将参数声明成可变长参数。
显然,可变长参数必须是最后一个参数。
请看 下面唐僧师傅给悟空讲佛经的例子:

package com.ywz;
public class Varargs{
public void speak (String name,Object... arguments){
for(Object object : arguments) {
System.out.println(object);
}
}
public static void main(String[] args) {
Varargs va = new Varargs();
va.speak("悟空","人和妖精都是妈生的,");
va.speak("悟空","不同的人是人他妈生的,","妖是妖他妈生的,");
}
}
这个方法很好的解决了我们传递不确定个数的参数.当然 Object... arguments中的Object 也可以换成自己写的类.


对于for(Object object : arguments),为什么能这样写?
这样的写法,好像是在JAVA1.5中加入的新特性,也就是相当于:
for(int i=0;i<arguments.length;i++){
Object object = arguments[i];
}
知道怎样用就行了.

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
public class program {

     static void test(int... ints){
       for (int i = 0; i < ints.length; i++){
         System.out.println(ints[i]);
       }
     }
  
     public static void main(String[] args) {
       test(10, 20, 30, 40, 50);
     }
}
java varargs提供了可变长度的功能,有点类似于main方法的参数String[] args,我们在命令行运行时args可数是可变的。以上例子中传递的int[]用可变参数代替了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘洋 于 2011-10-8 12:25 编辑

参看张老师的Java高新技术java5新特性中的可变参数
回复 使用道具 举报
张雷 发表于 2011-10-8 12:15
有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题,我们一般采用下面的方法:
1.重载,多 ...

谢谢了 好好学习下
回复 使用道具 举报
传入参数的个数不固定,用法如下:
public class VariableParameter {
        public static void main(String[] args) {
                System.out.println(add(2,3));
                System.out.println(add(2,3,5));
        }
       
        public static int add(int x, int... args) {   //可变参数
        //只能出现在参数列表的最后
        // ...位于变量类型与变量名之间,前后有无空格都可以
                //调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中,以数组的形式访问可变参数
                int sum = x; //只是为可变参数创建数组(x 并不在创建的数组中)
               
                /*for(int i=0;i<args.length;i++) {
                        sum += args[i];
                }*/
               
                for(int arg : args) {  //增强的for循环
                        sum += arg;
                }
                return sum;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
lily 黑马帝 2011-10-9 08:39:45
7#
可变参数是JDK1.5的新特性,一般是用数组的形式来实现
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马