new Obejct時的流程

//測試初始化對象的時候的流程
1首先兩個測試類(父類和子類)(命名很不規範,大家諒解!)

package random;
public class asd extends A {
  public asd(){
   System.out.println("d1");
  }
   static{
    System.out.println("d2");
   
   }
   
  void asd1(){
   System.out.println("d3");
   }
 
 public static void main(String[] args) {
  A a = new A();
  a.a();
  asd d = new asd();
  d.asd1();
  d.a();
 
 }
}



package random;
public class A {
  public A(){
  System.out.println("a1");
 }
  static{
   System.out.println("a2");
 
  }
 
 void a(){
  System.out.println("a3");
  }
}



結果是:
a2
d2
a1
a3
a1
d1
d3
a3


另外我在晚上查了下資料別人說的流程是:

所有的類都是在對其第一次使用時,動態加載到JVM中。當首次創建類型爲Dog的對象時,或者Dog類的靜態方法,靜態屬性域首次被訪問時,java解釋器查找classPath,定位到Dog.class文件

 

2. 載入Dog.class文件,生成一個Class類型對象,所有有關的靜態初始化動作都會執行,靜態代碼塊,靜態成員屬性。 並且這種初始化動作只在Class對象首次加載時候進行一次。

 

3. 當用new Dog()創建對象時,首先JVM在堆heap上爲Dog對象分配足夠的存儲空間

 

4. 存儲空間清空,自動將Dog對象中的所有基本類型數據都設置成了默認值,對象引用被設置爲null

 

5. 執行所有在字段定義處的一些初始化操作

 

6. 調用構造器方法。(沒有繼承)

 

如此一來,便創建了這個對象.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章