首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候发生静态类初始化?

问什么时候发生静态类初始化?
EN

Stack Overflow用户
提问于 2010-08-17 03:56:25
回答 2查看 77.6K关注 0票数 121

何时初始化静态字段?如果我从未实例化过一个类,但我访问了一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法是否都在此时被调用(按顺序)?

如果我调用静态方法呢?它也运行所有的静态块吗?在这个方法之前?

EN

回答 2

Stack Overflow用户

发布于 2010-08-17 04:23:08

静态字段在类加载(加载、链接和初始化)的初始化“阶段”期间初始化,其中包括静态初始化程序及其静态字段初始化。静态初始化器按照类中定义的文本顺序执行。

考虑一下这个例子:

代码语言:javascript
复制
public class Test {

   static String sayHello()  {
      return a;
   }

   static String b = sayHello(); // a static method is called to assign value to b.
                                 // but its a has not been initialized yet.

   static String a = "hello";

   static String c = sayHello(); // assignes "hello" to variable c

    public static void main(String[] arg) throws Throwable {
         System.out.println(Test.b); // prints null
         System.out.println(Test.sayHello()); // prints "hello"
    }
}

B打印null,因为在静态作用域中调用sayHello时,没有初始化静态变量a。

票数 15
EN

Stack Overflow用户

发布于 2010-08-17 03:58:51

是的,所有静态初始化程序都在第一次访问类之前运行。如果有别的办法的话,我会叫它窃听器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3499214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档