java的執行流程(轉)

ba發表於2007-08-15
java的執行流程(轉)[@more@]一,我們所看不到的:
1,如果java檔案沒有package,就預設給檔案加上"無名"package;
2,預設匯入java.lang包,所以我們的java程式中可以使用Sting,Math,Integer等類,包括一些異常類;
3,如果生成的類沒有父類,則為這個類隱式加上父類:Object;因此,包括Object中的許多方法可以使用;
4,欄位的初始化;
二,我們所看的到的:
既然看的到,就先看程式執行結果:

public class JRun1 {

public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}

public static void main(String[] args) {
System.out.println("main()");
}

}
執行結果:
static{}
main()


顯然,程式執行時,先執行:
static
{
System.out.println("static{}");
}
再呼叫main();


注意: 我們可以得到一個副產品:不用main方法也能執行的程式:
public class JRun1 {

static
{

System.out.println("no main()");
System.exit(0);
}

}


如果我們在類中建立一個物件:
public class JRun1 {


public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");

}
{
System.out.println("{}");
}

public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}


}

執行結果:
static{}
main()
{}
建構函式

從而,我們得出:
建立一個非主類物件,順序為:靜態初始化塊static{}--&gt初始化塊{}--&gt建構函式constructor;


那麼,牽涉到繼承,執行流程又如何?

看程式:

class JRun1Father{
JRun1Father(){
System.out.println("父類建構函式");
}
static{
System.out.println("父類靜態初始化塊");
}
{
System.out.println("父類初始化塊");
}
}
public class JRun1 extends JRun1Father{


public JRun1() {
System.out.println("子類建構函式");
}
static
{
System.out.println("子類靜態初始化塊");

}
{
System.out.println("子類初始化塊");
}

public static void main(String[] args) {
//System.out.println("主方法)");
new JRun1();
}

}

執行結果:

父類靜態初始化塊
子類靜態初始化塊
父類初始化塊
父類建構函式
子類初始化塊
子類建構函式

所以,牽涉到父類:父靜態--&gt子靜態--&gt父初始化及構造--&gt子初始化及構造;
注意:初始化塊和構造是接連執行的,不會父類子類交替.
//////////////////////////////////////////////////////////////////////////
作者:laodie

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958161/,如需轉載,請註明出處,否則將追究法律責任。

相關文章