繁体   English   中英

java 何时执行类级字段分配?

[英]When does java execute class-level field assignments?

我认为自己在编程方面有点初学者/中级; 大多数时候,我似乎知道如何编写代码,但我并不确切知道 java 用它做了什么。 有时我有一个在构造函数中分配的字段:

public class MyClass {
     public int x;
     
     MyClass() {
       x = 5;
     }
}

...据我所知,当创建 MyClass 的新 object 时,x 设置为 5。 但是,有时我在任何构造函数或 function 之外分配字段:

public class MyClass {
     public int x = 5;
     public static MyOtherClass y = new MyOtherClass();
 
     public MyClass() {

     }
}

java 究竟何时运行这些作业? 它们是在创建 MyClass 的 object 时还是在此之前完成的? 如果我引用 static 变量,例如“y”:

public class MyThirdClass {
     public MyOtherClass z = MyClass.y;
}

我第一次引用它时是否分配了“y”,或者 Java 在此之前已经完成了吗? 在这种情况下,在创建 MyClass 的新 object 后无法分配“y”,因为我还没有为它创建任何对象。 那么,所有这些在构造函数和方法之外的字段分配是在程序运行时一次性完成,还是在第一次引用/需要它们时分配? 还是其他时间? 感谢您提供有关此的任何信息。

成员变量初始化器如下:

public class MyClass {
     public int x = 5;
     public int y;
     
     MyClass() {
       y = 6;
     }
}

内联到调用超级构造函数(隐式或显式)的所有构造函数中,在对超级构造函数的调用与构造函数主体的 rest 之间:

public class MyClass {
     public int x;
     
     MyClass() {
       super();
       x = 5;
       y = 6;
     }
}

它不仅仅是成员变量初始化器:成员变量初始化器基本上就像成员声明,后面跟着一个实例初始化器:

public int x = 5;

// is the same as

public int x;

{
  x = 5;
}

class 中的所有实例初始化程序都内联到超级调用构造函数中,按照它们在 class 中声明的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM