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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋映辉 中级黑马   /  2012-4-30 14:35  /  1945 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天看李刚老师的《疯狂JAVA》讲义   实例里边有这样一个东西,但是好像基础里没有讲,求解答
在编写梭哈游戏的时候有这样一个方法 public void initPlayer(String... names){..} 调用的时候是:sh.initPlayer("电脑玩家","孙悟空").看了一下,它是把调用的时候的字符串存在names数组里的感觉
  求详细解释。

5 个回复

倒序浏览
这个是java的JDK 1.5 以后的新特性,开始支持动态参数列表。
比如说:
  1. public void test(String ...name){
  2. for(int i = 0 ; i < name.length ; i ++){
  3.   System.out.println(name[i]);
  4. }
  5. }
复制代码
这里的动态参数列表会以数组的方式去接受。
但是要注意,就是这个动态参数列表只能出现在参数的最后。
比如::
  1. public void test(String ...name,int n ){
  2. for(int i = 0 ; i < name.length ; i ++){
  3.   System.out.println(name[i]);
  4. }
  5. }
复制代码
这样的话就不可以了。必须是:
  1. public void test(int n ,String ...name){
  2. for(int i = 0 ; i < name.length ; i ++){
  3.   System.out.println(name[i]);
  4. }
  5. }
复制代码
不知道能不能帮上你!谢谢!

评分

参与人数 1黑马币 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
这个方法的参数是可变参数,这是jdk1.5的新特性,就是函数不指定参数的个数,调用的时候,可以根据自己的需要传入几个参数。这不是将字符串存在names数组里

评分

参与人数 1黑马币 +1 收起 理由
蒋映辉 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 隋营营 于 2012-4-30 17:25 编辑

应该和PrintStream类的  public PrintStream printf(String format, Object... args) 用法相似
测试了一下下:
public class Cunt {

    public static void main(String[] args) {
        fuck("verycd", "163", "tianya");
    }

    static void fuck(String... values) { //这里的values是一个String数组
        System.out.println(values[0]); //输出:verycd
    } //System.out.println(values[1]); 输出:163

} //System.out.println(values[2]); 输出:tianya

评分

参与人数 1黑马币 +10 收起 理由
蒋映辉 + 10 很给力!

查看全部评分

回复 使用道具 举报
这是可变参数的写法,当你不确定这个方法应该接受几个参数时用,
有一些限制,就是可变参数必须是参数列表里最后一个。
使用的场景如:
public void initPlayer(String... names){
       for(String name:names)


}
回复 使用道具 举报
//这个传递的参数是JDK1.5以后的新特性
//如果是JDK1.4的话 ,我们应该这么写(Object [] obj)或者(String []str)
//但是你在外面传递的时候数组是固定的,
//如果你不想固定数组的长度,就可以用可变参数String ...names传递
//你想传递几个都可以。例如 String name1=“张三”,String name2=“李四”;
//你可以这样调用方法sh.initPlayer(name1);或者sh.initPlayer(name1,name2);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马