色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java構造和初始化順序

錢諍諍1年前7瀏覽0評論

在Java中,當一個對象被創建時,它的構造函數會被調用,用于初始化對象的數據成員。但是,在構造函數被調用之前,Java編譯器會自動初始化對象的數據成員,包括基本類型和引用類型,這些數據成員的初始值取決于它們的數據類型。

//基本類型的初始值
int i = 0;
double d = 0.0;
boolean b = false;
char c = '\u0000';
//引用類型的初始值
Object o = null;
String s = null;

當Java編譯器在構造函數之前初始化數據成員時,初始化的順序是:

  1. 靜態成員變量(static variable)
  2. 實例變量(instance variable)

當創建對象時,Java虛擬機會按以下順序執行對象的初始化:

  1. 執行靜態代碼塊(static block)
  2. 在父類中遞歸初始化數據成員和調用父類的構造函數
  3. 執行實例代碼塊(instance block)
  4. 執行構造函數(constructor)

代碼如下:

public class MyClass {
//靜態成員變量
static int count = 0;
static {
count++;
}
//實例變量
int num;
{
num = count;
}
//構造函數
public MyClass() {
System.out.println("MyClass " + num + " is created.");
}
public static void main(String[] args) {
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
}
}
//輸出結果:
//MyClass 1 is created.
//MyClass 2 is created.

以上代碼中,靜態代碼塊中的count會在程序運行時進行初始化。在創建第一個對象時,count的值變為1,然后通過實例代碼塊給num賦值,num的值也變成1,然后調用構造函數。創建第二個對象時,count的值變為2,num的值變成2,然后調用構造函數。因此,輸出結果為"MyClass 1 is created."和"MyClass 2 is created."。