Java静态变量初始化的坑
2024-10-19 04:42:41
class SingleTon {
private static SingleTon singleTon = new SingleTon();
public static int count1;
public static int count2 = 1; private SingleTon() {
count1++;
count2++;
} public static SingleTon getInstance() {
return singleTon;
}
} public class Test {
public static void main(String[] args) {
SingleTon singleTon = SingleTon.getInstance();
System.out.println("count1=" + singleTon.count1);
System.out.println("count2=" + singleTon.count2);
}
}
执行结果:singTon.count1=1 singTon.count2=1
class SingleTon {
public static int count1;
public static int count2 = 1;
private static SingleTon singleTon = new SingleTon(); private SingleTon() {
count1++;
count2++;
} public static SingleTon getInstance() {
return singleTon;
}
} public class Demo {
public static void main(String[] args) {
SingleTon singleTon = SingleTon.getInstance();
System.out.println("count1=" + singleTon.count1);
System.out.println("count2=" + singleTon.count2);
}
}
执行结果:count1=1 count2=2
private static SingleTon singleTon = new SingleTon(); 这句代码再static int ...之前只影响未被赋值的变量,在static int...之后,全部影响
原因:实例的初始化流程
1.类被加载的时候,普通方法加载到方法区,静态方法和静态字段加载到方法区中的静态区
2.首先静态字段会进行默认初始化。即 singTon=null count1=0 count2=0
3.然后静态字段会进行显示初始化。问题就出现这里(这里就是影响结果的地方)
4(第一个例子先执行4).首先 singTon 进行显示初始化 它会创建 实例,调用构造函数,执行完成以后
5(第二个例子先执行5).然后才是静态变量 count1和count2进行显示初始化
6.然后执行静态代码块中的内容,此处没有静态代码块。
最新文章
- MapReduce剖析笔记之四:TaskTracker通过心跳机制获取任务的流程
- SQL的ROW_NUMBER函数
- SOLID rule in JAVA design.
- SSH服务器与Android通信(2)--Android客户端接收数据
- 获取SQLSERVER所有库 所有表 所有列 所有字段信息
- ffmpeg-20160325-snapshot-static-bin
- 3D 生物打印血管成功植入恒河猴体内
- Linux安全攻防笔记
- 基于AppCan MAS系统,如何轻松实现移动应用数据服务?
- xcode5.1 cocoapods报错
- ActionScript接收socket服务器发送来的数据
- 利用Linux系统函数alarm() 来检测计算机性能
- [Android学习笔记]View的draw过程学习
- 求n个逆元的O(n)算法
- String、StringBuilder和StringBuffer
- 《Python网络编程》学习笔记--UDP协议
- Spring揭秘 读书笔记 五 容器的启动
- jenkins 忘记用户名和密码
- js生成1-100不重复的随机数及生成10个1-100不重复的随机数
- VBA消息框
热门文章
- elastalert基本配置说明
- The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
- PAT 乙级 1091.N-自守数 C++/Java
- java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES)
- 08-C#笔记-判读语句
- Scrapy的中间件(二)
- date命令的FORMAT中输入空格的几种方法
- 【组合数学】【P5520】[yLOI2019] 青原樱
- 【数位DP】【P4127】[AHOI2009]同类分布
- 【LG4397】[JLOI2014]聪明的燕姿