java 對象的創建過程


初始化的順序首先是static(如果它們尚未由前一次對象創建初始化,也就是new對象的時候,只執行一次static變量初始化),變量初始化順序有變量在類的定義順序決定的;

對象的創建過程,以Dog類為例:

1.類型為Dog首stati次創建的時候,或者Dog類的stajitic方法/static字段首次訪問時,java編譯器必須找到Dog.class;

2.找到Dog.class后(它會創建一個Class對象),它的所有static初始化模塊都會運行。因此,static初始化僅發生一次-----在Class對象首次載入的時候

3.創建一個new Dog()時,Dog對象的構建進程首先會在內存堆(heap)里為一個Dog對象分配足夠多的內存空間;

4.這種空間為情況為0,將Dog中的所有基本類型設為它們的默認值;

5.進行字段定義時發生的所有初始化都會執行;

6.執行構造器

 

package thinking;
//: Beetle.java
// The full process of initialization.
class Insect {
  int i = 9;
  int j;
  Insect() {
    prt("i = " + i + ", j = " + j);
    j = 39;
}
   static int x1 = prt("static Insect.x1 initialized");
   static int prt(String s) {
      System.out.println(s);
     return 47;
   }
}

繼承類

package thinking;
public class Beetle extends Insect {
    int k = prt("Beetle.k initialized");
    Beetle() {
      prt("k = " + k);
      prt("j = " + j);
}
static int x2 = prt("static Beetle.x2 initialized");
static int prt(String s) {
    System.out.println(s);
    return 63;
}
public static void main(String[] args) {
    prt("Beetle constructor");
    Beetle b = new Beetle();
}
}

執行結果:

static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 63
j = 39


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM