参考: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. Day 24:XML基础

    Q: 什么是XML,为什么学习XML? A:XML为可扩展标记语言. 标签由开发者自己制定的(要按照一定的语法定义)描述带关系的数据(作为软件的配置文件): 包含与被包含的关系 properties文 ...

  2. CheckBox标签和属性

    CheckBox的作用:可以提供复选 下面是我点击按钮查看所选内容的代码:定义按钮监听器,并在onClick方法中调用shoeAlt方法(此方法会在第二块代码定义) Button btn=(Butto ...

  3. P1048 数字加密

    P1048 数字加密 转跳点:

  4. 讨论(xia che ≖‿≖✧)magic number——1000000007

    为什么要对1000000007取模(取余) 来看这篇博客的基本上都是和我一样脑子有坑的人,要么就是看了我某篇大数阶乘,大数的排列组合等类似博客被忽悠过来的.我刚刚说到那些类型的题目一般都要求将输出结果 ...

  5. Shell脚本之awk篇

    目录:一.概述二.awk基本语法格式三.awk基本操作四.awk条件及循环语句五.awk函数六.awk演示示例(源自于man手册) 一.概述 1. 产品概述: awk是一种编程语言,用于在linux/ ...

  6. python 编写程序输出50以内勾股数,如下图所示,要求每组显示六祖,各组勾股数无重复

    import math n = 0 for a in range(1,49): for b in range(a,49): c = math.ceil(math.sqrt(a**2+b**2)) if ...

  7. [LeetCode] 930. Binary Subarrays With Sum 二元子数组之和

    In an array A of 0s and 1s, how many non-empty subarrays have sum S? Example 1: Input: A = [1,0,1,0, ...

  8. python中添加requests资源包

    1.进入资源网址下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 2.按下CTRL+F进行页面查找“requests” 3.点击requests-2.22. ...

  9. 五十五、SAP中调用系统自带的函数

    一.我们需要取一个月中的最后一天,代码如下 二.执行结果如下 三.以上为纯手打,错了好几次才改过来,还有一个办法就是系统自动生成,点击编辑->模式 四.输入需要调用的函数名字BKK_GET_MO ...

  10. 092-PHP定义索引数组

    <?php $arr=array('name'=>'PHP','age'=>22,7=>25,33,21=>35,56); //定义一个索引数组 echo '数组$arr ...