本文介绍了使用子类名访问父类静态字段不会加载子类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

class A {
    static int super_var = 1;
    static {
        System.out.println("super");
    }
}

class B extends A {
    static int sub_var = 2;
    static {
        System.out.println("sub");
    }
}
public class Demo{
    public static void main(String []args){
        System.out.println(B.super_var);
    }
}

输出为:

super
1

这意味着孩子班级不会加载或任何其他东西?它是如何工作的?

this means that the child class not going to load or any other thing? how is it works?

推荐答案

当您访问 static 字段时子类引用上的超类,只有声明该字段的类才会被加载和初始化,在这种情况下它是 A 。这在:

When you access the static fields of a super class on subclass reference, only the class that declares the field will be loaded and initialized, in this case it is A. This is specified in JLS §12.4.1 - When Initialization Occurs:

强调我的。

所以在你的代码中,类 B 甚至不会被初始化,因此它的 static 块不会被执行。

So in your code, class B would not even be initialized, and hence its static block would not be executed.

这篇关于使用子类名访问父类静态字段不会加载子类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 19:43