初始化顺序问题,为什么会这样?
package com.mengdd.classloader;
class Singleton {
// private static Singleton mInstance = new Singleton();// 位置1
// 位置1输出:
// counter1: 1
// counter2: 0
public static int counter1;
public static int counter2 = 0;
private static Singleton mInstance = new Singleton();// 位置2
// 位置2输出:
// counter1: 1
// counter2: 1
private Singleton() {
counter1++;
counter2++;
}
public static Singleton getInstantce() {
return mInstance;
}
}
public class Test1 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstantce();
System.out.println("counter1: " + Singleton.counter1);
System.out.println("counter2: " + Singleton.counter2);
}
}我知道这样的输出结果是由于初始化顺序造成的,但是构造方法为什么会先于静态代码执行?
private static Singleton mInstance = new Singleton();这句到底执行了什么?
...全文
相关推荐
SD卡的SPI模式的初始化顺序
CMD0的特殊处理:CMD0是一个特殊的命令,在向SD卡发送CMD0之前,需要向SD卡发送74+个时钟,为什么要74个CLK呢?
如何正确控制springboot中bean的加载顺序小结篇
Spring Boot遵循“约定优于配置”的原则,简化了许多配置工作,但在特定情况下,我们需要手动干预Bean的加载顺序,以避免因依赖关系不正确而导致的异常。1. 为什么需要控制Bean的加载顺序?
KThread和TCB的构造顺序分析
在分析KThread和TCB的构造顺序时,我们还需要注意一些重要的问题。例如,在构造KThread时,为什么需要创建一个新的TCB对象?
C,C++表达式求值顺序超详解
首先,让我们考虑一个简单的例子:m = 1; n = m+++m++;这个例子看起来很简单,但是它却是一个典型的顺序问题。为什么n的值是多少?这个问题的答案取决于C和C++语言中的顺序规则。
495个C语言常见问题集
#### 1.12 这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式”。


Java SE
