为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑的夜晚无繁华 2019-06-21 15:22:31
什么时候发生静态类初始化?何时初始化静态字段?如果我从未实例化过一个类,但我访问了一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法是否都在此时被调用(按顺序)?如果我调用静态方法呢?它也运行所有的静态块吗?在方法之前?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

类的静态初始化通常在第一次发生下列事件之前立即发生:

  • 创建类的实例,
  • 调用类的静态方法,
  • 类的静态字段被分配,
  • 使用非恒定的静态字段,或
  • 对于顶级类,将执行在类中以词汇方式嵌套的断言语句。1.


查看完整回答
反对 回复 2019-06-21
?
开满天机

TA贡献1786条经验 获得超13个赞

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

考虑一下这个例子:

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没有初始化。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 755 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信