网站主体负责人邮箱,吴江网站优化,建设网站的时候,自己如何免费制作一个网站参考#xff1a;http://blog.csdn.net/yasi_xi/article/details/25482173 学习多线程的时候实例化线程数组而挖掘出来的一直以来的理解误区 之前一直以为for each 本质上和for循环以及迭代器没什么区别 1 package foreach;2 3 public class ForeachDemo1 {4 5 public …参考http://blog.csdn.net/yasi_xi/article/details/25482173 学习多线程的时候实例化线程数组而挖掘出来的一直以来的理解误区 之前一直以为for each 本质上和for循环以及迭代器没什么区别 1 package foreach;2 3 public class ForeachDemo1 {4 5 public static void main(String[] args) {6 Object[] objs new Test[5];7 int i 0;8 //for each的简洁使得我喜欢这种使用方式9 for(Object obj : objs) {
10 obj new Test(i );
11 System.out.println(objs[i]);//2
12 }
13 System.out.println(objs[2]);//1
14 }
15
16 }
17
18 class Test {
19
20 private String value;
21
22 public Test(String value) {
23 this.value value;
24 }
25
26 public String getValue() {
27 return value;
28 }
29
30 public void setValue(String value) {
31 this.value value;
32 }
33
34 Override
35 public String toString() {
36 return Test [value value ];
37 }
38
39
40
41 } 打印的结果使得我很是懵逼 后来查了下资料才知道for each内部的大概实现方式 有趣的是这个砸到我头的苹果是这样的.. 1 package foreach;2 3 public class Apple1 {4 5 public static void main(String[] args) {6 Thread[] t1 new T1[3];7 Thread[] t2 new T2[2];8 9 for(Thread t : t1) {
10 t new T2();//大概就是这样原代码是生产者消费者交替打印而产生的线程无限等待
11 //然而这样做并没毛病
12 //--等价于
13 //Thread t t1[0]
14 //t new T2()
15 //t.start()
16 //这当然没问题了
17 t.start();
18 }
19
20 t1[0] new T2();
21 //但是这样的话 就抛异常了【当你试图将错误类型的对象存储到一个对象数组时抛出的异常】
22 //声明的空间和实际new的类型不一致
23 }
24
25 }
26
27 class T1 extends Thread {
28
29 //...
30
31 Override
32 public void run() {
33 // TODO Auto-generated method stub
34 }
35
36 }
37
38 class T2 extends Thread {
39
40 //..
41
42 Override
43 public void run() {
44 // TODO Auto-generated method stub
45 }
46
47 } 验证 1 package foreach;2 3 public class Demo2 {4 5 public static void main(String[] args) {6 String[] strs new String[3];7 8 for(String s : strs) { 9 s 1;
10 }
11
12 System.out.println(strs[0]);
13 }
14
15 } 转载于:https://www.cnblogs.com/microcat/p/6569018.html