为什么当我们调用静态最终变量时不首先执行静态块

DEEPAK KUMAR:
class Test4 {
     public static void main(String as[]) {
         System.out.println(Hello.x); 
     }

}

class Hello {
    final static int x=10;
    static {
        System.out.println("Hello");                
    }
}

输出: 10

Hello我所知,如果我们调用静态变量然后加载第一个类,为什么它不打印,那么当加载类时,首先应执行静态块,然后发送静态变量。

杰斯珀:

静态初始化程序块在包含它的类被初始化时执行-通常在加载该类时执行。

您可能会说,在Hello访问class ,JVM应该加载并初始化Hello.xclass Test4但是,这不是在这里发生,因为这是特例。

static final常量由编译器内联-这意味着在编译此代码时,Hello.x编译时将in main方法替换为常量的值10本质上,您的代码将编译为与编译时相同的字节代码:

class Test4 {
    public static void main(String[] args) {
        System.out.println(10); // Inlined constant value here!
    }
}

class Hello {
    final static int x = 10;
    static {
        System.out.println("Hello");                
    }
}

请注意,在这种情况下,类Test4实际上并不访问类Hello-因此Hello在运行时不会加载并且不会执行静态初始化程序Test4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们不能在INTERFACE的静态块内分配变量?OCA

当您有静态块时,为什么我们需要main方法

为什么当我们调用“任务”变量时,必须将其写为“ task()”

为什么不执行静态块

当我们声明静态变量时,编译器实际上会做什么?

当我们拥有currentThread()方法时,为什么Thread类具有静态方法?

为什么不首先调用静态构造函数,而在使用声明的变量时出现异常?

为什么我们需要定义类的静态变量,而在函数内部不定义静态变量呢?

(为什么)我们可以在初始化时将非静态类成员分配给静态变量?

为什么在静态初始化块中不允许使用合格的静态最终变量?

为什么访问Child.name时不执行Child类的静态块?

当我们不使用方法隐藏时,为什么不调用父方法?

为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

当我们想向 DOM 添加方法时,为什么要将 elment 存储在变量中?

如果引用的静态字段是最终的,为什么不执行静态初始化程序

为什么我们不能用从类型变量未初始化的局部变量访问静态内容?

我们到底什么时候应该使用“公共静态最终字符串”?

为什么我们不能在(非静态)内部类中使用静态方法?

为什么我们使用非静态属性来锁定非静态字段?

当我们返回本地地址而不返回本地变量时,为什么会产生运行时错误?

当我们将方法存储在变量中然后调用它时,为什么上下文对象更改为全局窗口对象?

为什么我们不能通过未初始化的局部变量访问静态内容?

WPF当我们的ViewModel是静态对象时防止内存泄漏

当我们在C中声明静态向量时,是否存储了指向该向量的指针?

当我在Java的静态块中声明接口时,为什么编译器会显示错误?

为什么不能在实例块中为最终的静态变量分配值?

为什么一个变量需要在最终块静态

当我们已经具有MVC提供的默认功能时,为什么我们需要Ajax / jQuery调用colntroller方法?

为什么当我们在浏览器中按返回按钮时,jquery不隐藏内容