参考:http://blog.csdn.net/yasi_xi/article/details/25482173

学习多线程的时候实例化线程数组而挖掘出来的一直以来的理解误区

之前一直以为for each 本质上和for循环以及迭代器没什么区别

 package foreach;

 public class ForeachDemo1 {

     public static void main(String[] args) {
Object[] objs = new Test[5];
int i = 0;
//for each的简洁使得我喜欢这种使用方式
for(Object obj : objs) {
obj = new Test(i + "");
System.out.println(objs[i++]);//
}
System.out.println(objs[2]);//
} } class Test { private String value; public Test(String value) {
this.value = value;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} @Override
public String toString() {
return "Test [value=" + value + "]";
} }

打印的结果使得我很是懵逼

后来查了下资料才知道for each内部的大概实现方式

有趣的是,这个砸到我头的苹果是这样的..

 package foreach;

 public class Apple1 {

     public static void main(String[] args) {
Thread[] t1 = new T1[3];
Thread[] t2 = new T2[2]; for(Thread t : t1) {
t = new T2();//大概就是这样,原代码是生产者消费者交替打印而产生的线程无限等待
//然而这样做并没毛病
//-->等价于
//Thread t = t1[0]
//t = new T2()
//t.start()
//这当然没问题了
t.start();
} t1[0] = new T2();
//但是这样的话 就抛异常了【当你试图将错误类型的对象存储到一个对象数组时抛出的异常】
//声明的空间和实际new的类型不一致
} } class T1 extends Thread { //... @Override
public void run() {
// TODO Auto-generated method stub
} } class T2 extends Thread { //.. @Override
public void run() {
// TODO Auto-generated method stub
} }

验证:

 package foreach;

 public class Demo2 {

     public static void main(String[] args) {
String[] strs = new String[3]; for(String s : strs) {
s = "1";
} System.out.println(strs[0]);
} }

JavaSE--for each的更多相关文章

  1. 用大白话聊聊JavaSE -- 如何理解Java Bean(一)

    首先,在开始本章之前,先说一个总的概念:所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件.这就是Java Bean,很多初学者,包括当年的我自己,总是被这些专 ...

  2. javaSE基础07

    javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...

  3. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  4. javaSE基础05

    javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...

  5. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  6. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  7. 用大白话聊聊JavaSE -- 自定义注解入门

    注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如 ...

  8. javaSE基础02

    javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

  9. JavaSE基础01

    JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...

  10. javaSE学习路线

    Java SE大致可分为以下几块内容: n  对象导论:如何用面向对象的思路来开发 n  深入JVM:Java运行机制以及JVM原理 n  面向对象的特征:封装.继承.抽象.多态 n  数组和容器:容 ...

随机推荐

  1. IDEA启动Tomcat报错Address localhost:1099 is already in use解决办法

    问题:Error running 'lugia-web': Address loaclhost:1099 is already in use如下图 解决方法:cmd输入下面命令: netstat -a ...

  2. Linux每日练习-复习紧急救援模式下重改root权限密码 20200225

  3. es6 中的 Promise

    var promise = new Promise( function( resolve, reject ){             function onServiceSuccess( data ...

  4. Hadoop完全高可用集群安装

    架构图(HA模型没有SNN节点) 用vm规划了8台机器,用到了7台,SNN节点没用   NN DN SN ZKFC ZK JNN RM NM node1 *     *         node2 * ...

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 指针

    每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址. #include <iostream> using namesp ...

  6. Day 19:Properties配置文件类、打印流(printStream) 、 编码与解码

    Properties(配置文件类): 主要用于生产配置文件与读取配置文件的信息. Properties要注意的细节:  1. 如果配置文件的信息一旦使用了中文,那么在使用store方法生成配置文件的时 ...

  7. python 将数组中取某一值的元素全部替换为其他元素的方法

    这里的问题是在做House Price Prediction的时候遇到的,尝试对GarageArea做log转化,但是由于有些房子没有车库,所以GarageArea = 0,再通过log转化变成-in ...

  8. 使用jdbc连接oracle

    1.创建一个jdbc.properties 文件 driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521 ...

  9. Cookie简单介绍

    Cookie 饼干. 其实是一份小数据, 是服务器给客户端,并且存储在客户端上的一份小数据 应用场景 自动登录.浏览记录.购物车. 为什么要有这个Cookie http的请求是无状态. 客户端与服务器 ...

  10. 用Maven整合SSM项目实例

     转自https://www.cnblogs.com/hujianblogs/p/8526737.html 本人在学习Maven之余,为了深入了解Maven的用法,决定创建一个SSM整合实例.项目是自 ...