号称是世界上所有的Java程序员都会犯的错误
2014-11-30 15:42
381 查看
package test01; class Singleton { public static Singleton singleton = new Singleton(); public static int a; public static int b = 0; private Singleton() { super(); a++; b++; } public static Singleton GetInstence() { return singleton; } } public class MyTest { /** * @param args */ public static void main(String[] args) { Singleton mysingleton = Singleton.GetInstence(); System.out.println(mysingleton.a); System.out.println(mysingleton.b); } }
一般不假思索的结论就是,a=1,b=1。给出的原因是:a、b都是静态变量,在构造函数调用的时候已经对a和b都加1了。答案就都是1。但是运行完后答案却是a=1,b=0。
如果稍稍调整下代码的位置如下:
public static int a; public static int b = 0;
<pre name="code" class="java" style="color: rgb(68, 68, 68); font-size: 14px; line-height: 28px;"> public static Singleton singleton = new Singleton();
效果就是刚才预期的a=1,b=1。
为什么呢,这3句无非就是静态变量的声明、初始化,值的变化和声明的顺序还有关系吗?Java不是面向对象的吗?怎么和结构化的语言似地,顺序还有关系。这个就是和Java虚拟机JVM加载类的原理有着直接的关系。
详细原因讲解猛戳我的博文/article/1853150.html
相关文章推荐
- 深入JVM之号称世界上所有Java程序员都会犯的一个错误
- 论全世界所有程序员都会犯的错误-Java基础-Java-编程开发
- 全世界所有程序员都会犯的错误及自己的一点补充说明
- [ZT]全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 号称所有程序员都会犯错的程序
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误
- 论全世界所有程序员都会犯的错误(C#)希望大家不会犯。
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误-蔡学镛
- 自己收集的,全世界所有程序员都会犯的错误
- 蔡学镛专栏:全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误(转贴)
- 全世界所有程序员都会犯的错误
- [引用]全世界所有程序员都会犯的错误