首先先说明下基本概念,
- 静态解析:符号引用在类加载阶段就转为直接引用,编译期可知,运行期不可变。
- 动态连接:符号引用在运行期间转化为直接引用。
下面,看下这段代码的输出结果,代码一
public class Animal {
static {
System.out.println("static Animal");
}
public static int value = 1;
public Animal() {
System.out.println("构造方法 Animal");
}
public static void main(String[] args) {
int value = Dog.value;
}
public class Dog extends Animal {
static {
System.out.println("static Dog");
}
public Dog() {
System.out.println("构造方法 Dog");
}
}
输出结果:
static Animal
原因分析,对于静态字段,只有直接定义这个字段的类才会被初始化,类初始化阶段是执行类构造器clinit()方法的过程,clinit()是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的。
没有回答对的,要认真看下面的内容啦,思考下这段代码的输出结果,<