今天看到一段代码,功能是打印所有时区:
for(String s : TimeZone.getAvailableIDs()) {
System.out.println(s);
}我感到奇怪的是这个语法,怎么中间是冒号,跟传统的for( ; ; )中间两个逗号不一样.
请大家为我解释一下这种语法现象,有什么用途.

解决方案 »

  1.   

    这是 JDK5 之后才有的新特性 跟原来的for循环没有什么不一样 
    可以上网搜一下 增强的for 循环,看看就明白啦冒号前String s  跟你在 for( ; ; ) { String s }  一样 冒号后 是一个数组,表示要从该数组中循环出你要的数据 
      

  2.   

    for(String   s   :   TimeZone.getAvailableIDs())
    这个是java中foreach的写法
    String 表示进行循环迭代的变量类型
    s 表示变量名  
    :相当于C#中foreach的in 操作符
    TimeZone.getAvailableIDs()  应该是一个String数组
    这个写法的意思是将TimeZone.getAvailableIDs()数组中的项每次拿给一个赋给变量s
    PS:需要注意的是s只是一个变量名,所以不一定要写s可以是任何符合变量命名的东西。比如str i j k....
      

  3.   

    for (String s: a)
    {
      // do something with s;
    }Equivalent to:for (int i=0; i<a.size();i++)
    {
      s=a.get(i);  //so something with s;
    }
      

  4.   

    按照3楼的解释,这确实有点方便阿,但是SUN这么作有什么必要呢,难道非要显得java越来越怪异深奥才能让人赞叹吗,算法效率上如果没有优化的话(估计这种简单的循环也不可能存在优化),那我认为这确实没什么必要,反而加大了一部分初学者的代码阅读难度,一家之见……
      

  5.   

    我觉得这样很好用,因为这不只可以是字串,更可以是一个自定义像user(用户)这样的object
    如 
    User是自定义的object
    users是List<User>变量for (User user: users) {
        System.out.println(user.name);
        System.out.println(user.brithday);
    }当然你可也以写成
    for (int i=0; i<users.size(); i++) {
        User user = users.get(i);
        System.out.println(user.name);
        System.out.println(user.brithday);
    }
    两者那个好用,很明显吧^^
      

  6.   

    jdk1.5增强的for循环语句啊,据说不是很好用,不知道大家意见如何
      

  7.   

    FOR( : )
    是为了 配合 集合的枚举接口
    只要实现了 枚举接口的对象就可以这样访问这样可以 避免 只能使用索引来访问集合