号称是世界上所有的Java程序员都会犯的错误
来源:互联网 发布:乐知英语在哪里 编辑:程序博客网 时间:2024/04/30 08:07
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加载类的原理有着直接的关系。
详细原因讲解猛戳我的博文http://blog.csdn.net/jdfkldjlkjdl/article/details/41623295
0 0
- 号称是世界上所有的Java程序员都会犯的错误
- 深入JVM之号称世界上所有Java程序员都会犯的一个错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 全世界所有程序员都会犯的错误
- 自己收集的,全世界所有程序员都会犯的错误
- [引用]全世界所有程序员都会犯的错误
- [ZT]全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误(转贴)
- 全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误-蔡学镛
- [转载]全世界所有程序员都会犯的错误-蔡学镛
- 全世界所有程序员都会犯的错误-蔡学镛
- 使用awk对文档中特定字段的排序
- 牛人博客和主页---站得高,看得更远(企业大牛的博客)
- hdu 2639 Bone Collector II
- Linux常用系统变量:
- 设计一个结构体bign来存贮高精度非负整数
- 号称是世界上所有的Java程序员都会犯的错误
- 第13周项目5-完成类似字符串复制的功能
- windows开发环境下 Apache+PHP环境整合安装
- CodeBlocks安装方法(Nightly Build版) 和几款高亮皮肤
- HEVC代码追踪(七):xCompressCu
- CSS属性overflow,cellspacing ,cellpadding
- SQLite学习过程遇到的问题
- Android性能优化篇:从布局角度进行优化
- 正则表达式基础