1、構造器初始化順序(普通代碼塊、靜態代碼塊、構造方法(子類、父類)、成員、靜態成員的執行順序)
public class Parent {
private int age = 2;
private String name = "micky";
public Parent(int age, String name) {
super();
System.out.println("構造方法---" + "age = " + age + "|" + "name =" + name );
this.age = age;
this.name = name;
System.out.println("構造方法+++" + "age = " + age + "|" + "name =" + name );
}
private static int version = 1;
static {
System.out.println("靜態代碼塊---" + "verion" + version);
version = 2;
System.out.println("靜態代碼塊+++" + "version" + version);
}
{
System.out.println("普通代碼塊---" + "version" + version);
age = 10;
name = "panda";
version = 3;
System.out.println("普通代碼塊+++" + "vesion =" + version +"|" + "age =" + age + "|" + "name = "+ name);
}
@Override
public String toString() {
System.out.println("toString方法" + "age = " + age + "|" + "name = " +name);
return super.toString();
}
輸出結果爲:靜態代碼塊—verion1
靜態代碼塊+++version2
普通代碼塊—version2
普通代碼塊+++vesion =3|age =10|name = panda
構造方法—age = 5|name =ruimin
構造方法+++age = 5|name =ruimin
toString方法age = 5|name = ruimin
執行順序爲 靜態對象初始化>靜態代碼塊>普通代碼塊>普通對象初始化>構造方法
2、垃圾回收器的回收機制
變量有兩種:原始主數據類型和引用
原始主數據類型指的就是指八種基本數據類型
引用是指創建對象的變量。
我們首先分析這幾種典型代碼的堆棧情況:
首先爲大家講述一下實例變量和局部變量的概念
實例變量:對象的狀態即爲實例變量,實例變量是被聲明在類而不是在方法裏,實例變量存在於所屬的對象中。
局部變量:對象的行爲即爲方法,聲明在方法中的變量即爲局部變量,局部變量和方法的參數被聲明在方法中。它是暫時的,且生命週期只限於方法被放在棧上的這段空間。
對象一定是在堆中,實例變量永遠都會有默認值,局部變量沒有默認值,如果在變量初始化之前就使用的話,編譯器會顯示錯誤。
所有局部變量聲明在方法或方法的參數上
當沒有一個引用指向對象時,該對象就隨時可能被垃圾回收器回收