从头认识java-特辑-foreach在java里面两种实现原理总结
2016-03-21 23:51
651 查看
这一章节我们来讨论一下foreach在java里面两种实现原理总结。
1.数组
在数组里面,是固有的foreach实现,直接循环数组
(1)代码清单
(2)使用javap查看反编译代码:
从图中使用goto可以得知,在实际执行当中,foreach就像for一样循环遍历数组
2.实现了Iterable的类
这里面包括容器等实现类。
(1)代码清单
(2)使用javap查看反编译代码
在红色框里面我们可以看到,对于容器的迭代,是通过迭代器来实现。
3.我们动手自己实现一个Iterable的类看看效果怎样。
代码清单:
上面的代码功能是输入一个字符串,然后遍历字符串的每一个字符。
在上面的main方法里面我们可以明显看见,foreach里面只需要放置test对象即可直接遍历,其实他的实现就是实现了一个迭代器,然后通过迭代器来遍历字符串。
总结:这一章节我们总结了foreach在java里面两种实现原理总结。
这一章节就到这里,谢谢。
-----------------------------------
目录
1.数组
在数组里面,是固有的foreach实现,直接循环数组
(1)代码清单
package com.ray.test; public class ForEachInstanceForArray { public static void main(String[] args) { String a = "abc"; for (char item : a.toCharArray()) { System.out.println(item); } } }
(2)使用javap查看反编译代码:
从图中使用goto可以得知,在实际执行当中,foreach就像for一样循环遍历数组
2.实现了Iterable的类
这里面包括容器等实现类。
(1)代码清单
package com.ray.test; import java.util.ArrayList; public class ForEachInstanceForList { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 5; i++) { list.add("a"); } for (String item : list) { System.out.println(item); } } }
(2)使用javap查看反编译代码
在红色框里面我们可以看到,对于容器的迭代,是通过迭代器来实现。
3.我们动手自己实现一个Iterable的类看看效果怎样。
代码清单:
package com.ray.test; import java.util.Iterator; public class ForEachExample { public static void main(String[] args) { Test test = new Test(); test.setStr("abc"); for (char item : test) { System.out.println(item); } } } class Test implements Iterable<Character> { private String str = ""; public String getStr() { return str; } public void setStr(String str) { this.str = str; } @Override public Iterator<Character> iterator() { return new Iterator<Character>() { private int index = 0; @Override public boolean hasNext() { return index < str.length(); } @Override public Character next() { return str.toCharArray()[index++]; } }; } }
上面的代码功能是输入一个字符串,然后遍历字符串的每一个字符。
在上面的main方法里面我们可以明显看见,foreach里面只需要放置test对象即可直接遍历,其实他的实现就是实现了一个迭代器,然后通过迭代器来遍历字符串。
总结:这一章节我们总结了foreach在java里面两种实现原理总结。
这一章节就到这里,谢谢。
-----------------------------------
目录
相关文章推荐
- 学java时遇到的一些小问题
- JAVA 基础 final关键字
- Java对象的序列化和反序列化
- java基础学习02(简单的java程序)
- SpringBoot配置log4j输出日志
- 3.20 JAVA
- String.getBytes()& JAVA编码转换的详细过程
- java——基础02
- Java基础小结
- Java的心路历程——杂谈向
- spring mvc4使用及json 日期转换解决方案
- Myeclipse 快捷键设置和自动提示设置
- Spring 源码分析(四) ——MVC(一)Web 基础
- JDK和JRE的区别
- springmvc流程
- 最近使用spring4.0的Mvc,json请求时,客户端报错,406 Not Acceptable
- Java修饰符 abstract,static,final 的区别详解
- Java实现数据库的连接(1)------SQL Server 2008
- springMVC
- spring 定时器