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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹文涛 黑马帝   /  2011-8-23 22:45  /  2200 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class GenericsDemo30{
        public static void main(String args[]){
                Integer i[] = fun1(1,2,3,4,5,6) ;        // 返回泛型数组
                fun2(i) ;
        }
        public static <T> T[] fun1(T...arg){        // 接收可变参数
                return arg ;                        // 返回泛型数组
        }
        public static <T> void fun2(T param[]){        // 输出
                System.out.print("接收泛型数组:") ;
                for(T t:param){
                        System.out.print(t + "、") ;
                }
        }
};

新手 学第一遍 刚学到泛型 看到上面的那个for循环有点不解 它是怎么个实现过程呀?:)

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

8 个回复

倒序浏览
黑马网友  发表于 2011-8-23 22:56:31
沙发
for(T t:param){
       System.out.print(t + "、") ;
                }
数组里面的位置   值
0                                1   <------>赋值给变量t   输出 :System.out.print(t)  进入下一步
1                                 2  <------>赋值给变量t   输出 :System.out.print(t)  进入下一步
2                                3   .....
3                                4 ....
4                                5<------>赋值给变量t   输出 :System.out.print(t)  已经到达最大索引位置,结束!
回复 使用道具 举报
黑马网友  发表于 2011-8-23 22:57:43
藤椅
建议 楼主可以使用 断点跟踪   程序执行过程 一目了然

评分

参与人数 1技术分 +1 收起 理由
admin + 1 对!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-23 23:10:35
板凳
for增强循环.....一个特殊的用法,主要用于遍历集合,不用搞个iteator来迭代。。。
集合的实现过程就是编译器背后帮你搞到一个iteator迭代器,给你自动迭代。
迭代的时候不能remove。。。要不迭代器会报错还是怎么的。。。
一般数组的实现过程和for(int i=0;i<xx.length;i++)一样
回复 使用道具 举报
黑马网友  发表于 2011-8-24 00:09:30
报纸
在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,举个例子
int[ ] arr = new int[ ] {1, 2, 3, 4, 5};

增强for循环的写法:
for (int i : arr) {
   System.out.println(i);
}

这种写法在jdk1.5的编译器的内部会把它转成下面代码的形式进行处理
for (int i = 0; i < arr.length; i++) {
    System.out.println(i);
}

所以只要按照这种形式理解就行了,增强for循环只是使我们的代码更加的简洁,不过它无法操作迭代变量中的特定元素,因为它隐藏了迭代器,所以如果想操作特定元素,还是要用普通的迭代方法
回复 使用道具 举报
黑马网友  发表于 2011-8-24 00:20:42
地板
谢谢 不过这 迭代器 不了解
回复 使用道具 举报
黑马网友  发表于 2011-8-24 09:14:54
7#
你可以把迭代器理解成是一个指针,每次循环都指向下一个变量,不知道你有没有接触过JDBC,跟JDBC中的ResultSet很类似
回复 使用道具 举报
黑马网友  发表于 2011-8-29 16:00:25
8#
迭代器 暂且理解为一条条往下执行
回复 使用道具 举报
李叶 黑马帝 2011-8-29 18:33:13
9#
是的,for(T t : param){}这种格式就是个增强的循环

举个例子说明吧:
假设有一个这样的for循环:
for (String str : strArray) {
  System.out.println(str);
}

如果strArray是一个数组类型的对象的话,这个for循环就等同于:
for (int i=0; i<strArray.length; i++) {
  String str = strArray[ i ];
  System.out.println(str);
}

如果strArray是一个List类型的对象的话,这个for循环就等同于:
for (int i=0; i<strArray.size(); i++) {
  String str = strArray.get(i);
  System.out.println(str);
}

这两个普通的for循环能看懂吧?
它们的作用都是从一个数组或者集合中依次取出每条记录,然后再对这条记录进行操作
这种把数组和集合中的元素依次取出的操作,我们在这里暂且把它称之为“遍历”吧
然后,再仔细观察下这两个普通的for循环
对数组的遍历,使用的循环条件是i<strArray.length,取出元素的方式是str = strArray[ i ];
而对集合的遍历使用的循环条件是i<strArray.size(),取出元素的方式是str = strArray.get(i);
所以,很容易可以看出,如果使用普通的for循环,那么对数组的遍历和对List的遍历的代码是有区别的

下面再来看一下这个增强的for循环
由于增强的for循环它的表现形式是for(String str: strArray);
它表示的含义就是:从strArray中依次取出每条记录,并将其保存到str中
这样的好处是,无论strArray是数组还是集合,它都会自动去选择如何对strArray进行遍历
这样无论是对数组还是集合进行遍历,代码就都没有任何区别了,既简化了操作,又降低了程序复杂度

不知道这样你能不能看懂~
[ 本帖最后由 李叶 于 2011-08-29  18:37 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 回答的不错。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马