java 参数中含有… 是什么意思啊

publicTriangle(Pnt...vertices){this(Arrays.asList(vertices));}例如这里面的... public Triangle (Pnt... vertices) {
this(Arrays.asList(vertices));
}
例如这里面的
展开
 我来答
百度网友01fd80233
2010-04-27 · TA获得超过167个赞
知道答主
回答量:138
采纳率:0%
帮助的人:101万
展开全部
main方法的签名其实可以这样写:
public static void main(String... args)//方法1
它也可以运行.

并且,如果同时还存在
public static void main(String[] args)//方法2
会报已经存在重复的方法的错误.
由此可见,String... args跟String[] args对于虚拟机来说其实是一回事.
而且,在方法内,通过...传进来的参数的使用方法也跟一个数组完全无二,可以for循环,甚至可以直接转换:
public static void main(String... args)
{
String[] ss=args;
}

但对于程序员来说却还是有差别的.
1.调用
我们只能这样调用方法2:
main(new String[]{});
即,方法2只能接受String数组做参数.
而我们陌生的方法1可强了,用以下参数调用,照单全收:
main();
main(null);
main(null,null);
main(null,null,null);
......
main("a");
main("a","b");
main("a","b","c");
......
main(new String[]{});

(String...匹配String*,而null也可以是一个特殊的String)

2.参数位置
使用...的参数只能是最后一个参数.不然谁知道你调用的时候,点点点匹配到哪个实参?
public static void main(String[] args,int index)//可以
public static void main(String... args,int index)//不行!

3.重载
假设有以下两个方法:
public static void main(String... args)//方法1
public static void main(String a,String... args)//方法3
从语法上来看,这个重载完全没有错误,eclipse也没有报错.但是当调用时使用的参数个数大于这些方法中点点点参数前面的参数个数时,eclipse就会发现这个错误了.很拗口是不是?嘿嘿~还是举例来说吧.以上这两个方法,如果调用时
main();
编译器会认出这个调用的是方法1.但是如果调用时
main("");
编译器就疯了...因为一个String参数,既符合方法1的点点点,也符合方法3的String+点点点,编译器就不知道调用的是哪个方法了.
String[]参数不会有这种问题.
所以重载时要注意,如果点点点参数前面有跟它类型相同的参数...最好的方法,似乎就是换回数组形式了,要么就给方法改个名字吧.

4.遇上泛型加外包
用个实例来说
java.util.Arrays是个工具类,所有方法都是静态的,对数组的操作.里面有个方法asList(T... args),用来把类型T的数组转化成List<T>.
这是个很有用的方法,在绝大多数情况下都能如你所愿.
但是,你可以试试下面的写法
int[] is=...//自定义的数组,或者从什么地方获取来的数组
List<Integer> list=Arrays.asList(is);
很不幸,不要说执行,编译都通不过.错误的意思大概是:
不能将List<int[]>转化成List<Integer>
明白了吧?
你的设想是,把int[]中的每一个元素对应T...中的每一个点,
可编译器不这么想.因为int是原始类型,不是Object的子类.而泛型T隐含的条件是T extends Object.所以编译器不会把每一个int看做T,不会把int[]看做T点点点.虽然java已经支持自动将原始类型封包成外包类,但那是单个的情况.
而数组(不管什么类型)则是一种特殊的类型,是Object的子类,所以编译器觉得整个int[]对应一个T,你调用的方法是asList<int[]>(int[]... args)而不是你想象中的asList<Integer>(Integer...)

参考资料: http://www.javaeye.com/wiki/topic/378989

woshidaniel
2015-09-19 · TA获得超过9240个赞
知道小有建树答主
回答量:1760
采纳率:96%
帮助的人:954万
展开全部

表示实参个数可变。

比如:

private static int sumUp(int... values) {//表示传入sumUp的整数个数不确定,values是一个长度不确定的int数组,根据传入的参数确定长度
     int sum = 0;
 for (int i = 0; i < values.length; i++) {
  sum += values[i];
 }
 return sum;
}

使用的时候

sumUp(1, 3, 5, 7);//这里参数是5个,则values的长度是5
sumUp(1, 3, 5, 7,9);//这里参数是5个,则values的长度是5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fylsh
2010-04-27 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1050万
展开全部
参数相当于一个动态数组,可以传递多个Pnt类型的参数用,隔开
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pe...n@sina.com
2010-04-27 · TA获得超过893个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:227万
展开全部
public Triangle (Pnt... vertices)
在jdk1.5以后等价于
public Triangle (Pnt[] vertices)
表示可变参数,实际接收的时候是数组
这种参数只能是参数表中最后一个参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
靠行吾朋微其0X
2010-04-27 · TA获得超过283个赞
知道答主
回答量:114
采纳率:0%
帮助的人:0
展开全部
java5的新特性

表示调用此构造器时可以传随意个数的参数,
而不像以前参数个数是写死的,
构造器要写很多才能实现传不同的参数创建类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式