静态测试
package com.cms.loadstatic;
/**
* @User: chenmingsong3
* @DateTime: 2021-07-30 11:02
* @Version:1.0.0.0
* @Desc: 测试静态代码块什么时候被加载到【方法区】
*/
public class StaticTest {
static {
System.out.println("static{}---StaticTest");
}
public static void main(String[] args) throws ClassNotFoundException {
// 场景1:测试new两次A。 结果:只会输出一次static{} 解释:如果这个class都没有被加载到内存,我还怎么去直接创建这个对象呢?
//test1();
// 场景2:测试静态调用A的属性. 结果:会输出一次static{} ,j = 2. 解释:如果这个class都没有被加载到内存,我还怎么调用这个类的属性或者方法呢?
//test2();
// 场景3:测试反射. 结果:只会输出一次static{}。 Class对象当class文件被【加载】的时候就被创建了的,用于获取处于【方法区】的类信息:属性、方法、类名、指向堆中Class的指针、指向类加载器的指针...
test3();
}
private static void test3() throws ClassNotFoundException {
Class<?> a1Class = Class.forName("com.cms.loadstatic.A");
Class<?> a2Class = Class.forName("com.cms.loadstatic.A");
}
private static void test2() {
System.out.println(A.j);
System.out.println(A.j);
}
private static void test1() {
new A();
new A();
}
}
class A{
int i = 1;
static int j = 1;
static {
// 报错。 静态只能调用静态
// i = 2;
j = 2;
System.out.println("static{} --A: j = " + j);
}
}