.class 文件 通过类加载器 --》加载到jvm(jvm包括一套字节码指令集、一组寄存器、一个栈、一个垃圾
回收堆和一个存储方法域) JVM是Java程序运行的环境
.class 文件中的
静态属性 ,类中的方法 ,都放在jvm中的 栈中
new的对象的属性值,属性的类型和对象本身的类型标记等 放于堆中
public class Test1 {
public static int a = 9;
static{
a = 10;
}
public static void main(String[] args) {
System.out.println(a);
}
}
//输出结果是10
public class Test1 {
public static int a = 9;
public static int b = 12;
static{
a = 10;
}
public static void main(String[] args) {
a = b;
System.out.println(a);
}
}
//输出结果是12
个人理解:静态代码块,在类加载到jvm之前已经先执行,对于//输出结果是10理解,先执行静态代码块,因为在内存中已经为a分配了内存,且其值为10,当类在加载到jvm的时候,发现内存中已经存在a=10,此时加载进来的a=9,是不会去替换a=10,故输出结果为10