Java中的 for-each 语句(相关接口Iterable,Iterator)

Java中的 for-each 语句(相关接口Iterable,Iterator)

java中的for-each语句最终会调用Iterable.iterator(),Iterator.next(),和iterator.hasNext()方法。

测试代码:

public class For {
    public void test(){
        List<Integer> lis = new ArrayList<Integer>();
        for(Integer i : lis){
            System.out.println(i);
        }
    }
    public static void main(String[] args) {
        new For().test();
    }
}

使用javap -c For.class 查看该class文件的test()方法的字节码:

 public void test();
    Code:
       0: new           #2                  // class java/util/ArrayList
       3: dup
       4: invokespecial #3                  // Method java/util/ArrayList."<init>":()V
       7: astore_1
       8: aload_1
       9: invokeinterface #4,  1            // InterfaceMethod java/util/List.iterator:		    ()Ljava/util/Iterator;
      14: astore_2
      15: aload_2
      16: invokeinterface #5,  1            // InterfaceMethod java/util/Iterator.hasNext:()Z
      21: ifeq          44
      24: aload_2
      25: invokeinterface #6,  1            // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      30: checkcast     #7                  // class java/lang/Integer
      33: astore_3
      34: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
      37: aload_3
      38: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      41: goto          15
      44: return

可以看到for-each语句会自动调用第9,16,25行的方法。

这些方法分别是java/util/List.iterator(),java/util/Iterator.hasNext(),InterfaceMethod java/util/Iterator.next()

第9行:java/util/List.iterator()来自List,实际最终继承自java/lang/Iterable.iterator方法;该方法返回一个java/util/Iterator对象。

所有能使用for-each语句的类,都得实现java/lang/Iterable,以下是jdk文档原话:

Implementing this interface allows an object to be the target of the "for-each loop" statement.

第16行和25行的方法java/util/Iterator.hasNext(),InterfaceMethod java/util/Iterator.next()来自java/util/Iterator接口,hasNext()在for-each语句中判断集合中是否还有数据,next()方法取出该数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值