Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2350965
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Java

2012-03-07 17:58:43

    在调用某个方法时,若是方法的参数个数事先无法确定该如何处理?例如System.out.printf()方法中并没有办法事先决定要给的参数个数,像是:

1
2
3
System.out.printf("%d",10);
System.out.printf("%d %d", 10, 20);
System.out.printf("%d %d %d", 10, 20, 30);

    在J2SE 5.0之后开始支持不定长度参数(Variable-length Argument),这可以让您轻松的解决这个问题,直接来看下面的范例:
 

MathTool.java
1
2
3
4
5
6
7
8
9
public class MathTool {
         public static int sum(int ... nums ) { //使用…声明参数
                   int sum = 0;
                   for(int num : nums) {
                            sum += num;
                   }
                   return sum;
         }
}

 
    要使用不定长度参数,在声明参数行时要在类型关键词后加上…,而在sum()方法的区块中可以看到,实际上nums是一个数组,编译器会将参数行的(int … nums)解释为(int[] nums),可以以下范例的方式制定各种长度的参数给方法来使用。
 

TestVarargs.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class TestVarargs {
         public static void main(String[] args) {
                   int sum = 0;
 
                   sum = MathTool.sum(1, 2);
                   System.out.println("1 + 2 = " + sum);
 
                   sum = MathTool.sum(1, 2, 3);
                   System.out.println("1 + 2 +3 = " + sum);
 
                   sum = MathTool.sum(1, 2, 3, 4, 5);
                   System.out.println("1 + 2 + 3 + 4 + 5 = " + sum);
         }
}

    执行结果:

    1 + 2 = 3
    1 + 2 +3 = 6
    1 + 2 + 3 + 4 + 5 = 15

 
    编译器会将传递给方法的参数解释为int数组传入至sum()中,所以实际上不定长度参数的功能也是自J2SE 5.0后所提供的编译蜜糖(Compiler Sugar)。
 
   在方法上使用不定长度参数时,记得必须声明的参数必须设置在参数行的最后一个。例如下面的方式是合法的:
 

1
2
3
public void someMethod(int arg1, int arg2, int ... varargs) {
          // ...
}

 
    但下面的方式是不合法的:
 

1
2
3
public void someMethod(int ... varargs , int arg1, int arg2) {
          // ...
}

 
    也无法使用两个以上的不定长度参数,例如下面的方式是不合法的:
 

1
2
3
public void someMethod(int ... varargs1, int ... varargs2){
          // …
}

 
    如果使用对象的不定长度参数,声明的方法相同。例如:
 

1
2
3
public void someMethod(SomeClass… somes){
          // …
}

无觅相关文章插件,快速提升流量

阅读(17152) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

lvxinzhi2012-03-07 18:00:00

本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站

先看两个简单的例子,来感受一下Java的不定长度参数
第一个例子:
Java代码  收藏代码

    public class VariArgs {  
      
        public static void main(String[] args) {  
            test();  
            test("aaa"); &nbs