黑马程序员技术交流社区
标题:
可变参数的问题
[打印本页]
作者:
张榆
时间:
2012-9-11 23:34
标题:
可变参数的问题
本帖最后由 张榆 于 2012-9-16 22:51 编辑
为什么
可变长度参数必须放在参数列表的最后?想了很久都没想到为什么,难道是规定?
作者:
舒远
时间:
2012-9-11 23:54
本帖最后由 舒远 于 2012-9-12 00:02 编辑
这个确实java语言级别的东西,就是语法规定。
因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。
作者:
王金科
时间:
2012-9-12 01:39
这是java语言的规则,没有什么可考虑的.
就好比是先有鸡还是先有蛋的问题
作者:
张飞年
时间:
2012-9-12 03:05
在J2SE 5.0中,一个新的语法被引入,就是在参数类型名称后面加上 ... ,表示该方法可以接受多个该类型的参数。需要说明的是可变长度参数必须放在参数列表的最后,且一个方法只能包含一个这样的参数。这个顺序的原因区分后续参数应该属于前面的不可变参数(如果有的话,且同一种类型)还是后面的可变参数。
作者:
黑马_许芸
时间:
2012-9-12 08:51
如果可变参数后面还有参数的话,那编译器怎么知道哪些是可变参数的部分呢?举个比较极端的例子,一个方法接受三个参数,第一个和第三个都是可变参数,然后你在调用这个方法的时候传入了8个参数吧,那编译器该怎样判断呢?为了避免有歧义,所以规定可变参数只能是最后一个参数了。
作者:
焦晨光
时间:
2012-9-12 09:59
代码说明问题!
class Demo
{
public void methed(int... x,int y)//
传入(1,2,3,4)将都被int... x接收,
//
int y没有值传入,编译失败
{
for(i=0;i<x.length;i++)
{
System.out.println(x
);
}
System.out.println(y);
}
public void methed2(int y,int... x)//
传入(1,2,3,4)1赋给y,其他全部赋给int... x
//
编译可通过
{
for(i=0;i<x.length;i++)
{
System.out.println(x
);
}
System.out.println(y);
}
}
class DemoTest
{
public static void main(String[] args)
{
Demo d = new Demo()
d.methed1(1,2,3,4);//调用methed1方法传入参数
d.methed1(1,2,3,4);//调用methed2方法传入参数
}
}
故,在java中,如果方法定义的参数列表中有可变参数,必须放在参数列表的最后
由此可以联想到在异常处理语句catch中,处理的父异常应放在最后处理是一个道理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2