分析类初始化

分析类初始化!

什么时候类会初始化

主动引用

  • main方法被调用时,其所在的类会首先被初始化
  • new一个类对象
  • 调用类的静态成员和方法(除了final常量)
  • 反射调用时
  • 初始化子类时,其父类如果没被初始化,则先去初始化父类
public class Test {

    public static void main(String[] args) throws ClassNotFoundException {
        //通过new一个类对象
        Son son = new Son();
        //通过反射加载
        Class.forName("com.geek.pritice.Son");
    }
}

class Father{
    static {
        System.out.println("这里是Father");
    }
}
class Son extends Father{
    static {
        System.out.println("这里是Son");
    }
}

结果如下:

结果

分析:因为一次程序执行,类只会加载一次,所以只显示一遍静态代码

类的被动引用

  • 当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:通过子类访问其父类的静态变量时,子类不会被初始化
  • 通过数组定义类的引用 如 : Study[] num = new Study[10];
  • 引用常量(常量在链接阶段就已经存入常量池中了)
posted @ 2023-03-12 23:11  Geek李  阅读(24)  评论(0)    收藏  举报