//測試初始化對象的時候的流程
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. 調用構造器方法。(沒有繼承)
如此一來,便創建了這個對象.