来自颜群老师的JVM课程
静态成员问题
final修饰的变量是常量
常量产生的时机:
时间:编译期间
地点:JVM(调用该变量的方法,这里是main方法)方法区中的常量池
通过查看StaticTest的.class文件
可以发现,在编译后在A中常量的值被调用到main函数中
父类子类的调用问题
1. 如果num被final修饰,则不会被初始化
2. 如果既被final修饰,又被static修饰也通过Random赋值,则又会被初始化
3. 如果num的初始化在Son类中也存在,则本次被调用的num是Son的成员,所以Son会被初始化。
同时根据主动使用的第四条,子类初始化会引发父类初始化,所以结果是:子类父类都初始化。