java new一個類對象,類中各部分執行順序:
靜態代碼塊—非靜態代碼塊—構造函數—一般方法。
public class father {
private String name;
father(){
System.out.println("--父類的無參構造函數--");
}
father(String name){
this.name=name;
System.out.println("--父類的有參構造函數--"+this.name);
}
static{
System.out.println("--父類的靜態代碼塊--");
}
{
System.out.println("--父類的非靜態代碼塊--");
}
public void speak(){
System.out.println("--父類的方法--");
}
public static void main(String[] args) {
System.out.println("--父類主程序--");
father father=new father("父親的名字");
father.speak();
}
}
運行如上main方法結果爲:
創建子類繼承該父類測試執行順序。
public class Son extends father{
private String name;
static{
System.out.println("--子類的靜態代碼塊--");
}
{
System.out.println("--子類的非靜態代碼塊--");
}
Son(){
System.out.println("--子類的無參構造函數--");
}
Son(String name){
this.name=name;
System.out.println("--子類的有參構造函數--"+this.name);
}
@Override
public void speak(){
System.out.println("--子類Override了父類的方法--");
}
public static void main(String[] args) {
System.out.println("--子類主程序--");
Son son=new Son("兒子的名字");
son.speak();
}
}
運行如上main方法結果如下:
運行如下main方法:
public static void main(String[] args) {
System.out.println("--子類主程序--");
Son son=new Son("兒子的名字");
son.speak();
father father=new father("父親的名字");
father.speak();
}
結果如下:
所以:
new一個類對象,類中各部分執行順序:靜態代碼塊—非靜態代碼塊—構造函數—一般方法。
子類繼承父類各部分執行順序爲:父靜態代碼塊–子靜態代碼塊–父非靜態代碼–父無參構造函數–子靜態代碼塊–子構造函數–方法。
注意:創建子類對象調用子類的構造方法的時候會先調用父類的構造方法,在子類的構造方法中調用父類的構造方法是用super(),如果沒有寫super(),則默認調用父類的無參構造方法。