| 導購 | 订阅 | 在线投稿
分享
 
 
 

Java學習之的對象初始化的講究

來源:互聯網  2008-05-19 06:33:24  評論

java在初始化的時候也有很多講究,因爲java中出現了類,所以在初始化的時候就有可能使用到創建新對象,所以,對于初始化的順序要求的比較嚴格,請看下面一個程序,是thinking in java中的一個程序,被我稍加改編,這樣可以更好的說明幾個初始化的要點:

class Cup

{

Cup(int marker)

{

System.out.println("Cup(" + marker + ")");

}

void f(int marker)

{

System.out.println("f(" + marker + ")");

}

}

class Cups

{

static Cup c1=new Cup(1);

Cup c3=new Cup(3);

static Cup c2= new Cup(2);

Cups()

{

System.out.println("Cups()");

}

Cup c4=new Cup(4);

}

public class ExplicitStatic

{

Cups c=new Cups();

{

System.out.println("Hello");

}

public static void main(String[] args)

{

System.out.println("Inside main()");

Cups.c1.f(99);

ExplicitStatic x=new ExplicitStatic();

}

static Cups x = new Cups();

}

大家可以手動執行一下這個程序,考慮一下結果是什麽,然後參照下面的答案對照一下,看看是否正確:

Cup(1)

Cup(2)

Cup(3)

Cup(4)

Cups()

Inside main()

f(99)

Cup(3)

Cup(4)

Cups()

Hello

我總結了四個初始化的要點,如下:

1、如果有static,即靜態成員定義,首先初始化static的變量,如,在類Cups中c3在c2前面,可是在輸出的結果中,你可以發現,c2是在c3前執行的,這就是因爲,所有的static都在第一時間被初始化。

2、Static只初始化一次,在第二次創建類的對象的時候,就不會去執行static的語句,如,在第二次執行new Cups()的時候,就只輸出了Cup(3)和Cup(4),顯然,static的兩個創建對象的語句沒有做。

3、變量的初始化在方法前。如,在Cups類中,方法Cups()在語句Cup c4=new Cup(4)之前,可是輸出結果的時候,打印的Cups()卻在Cup(4)之後。

4、在含有main的類中執行順序是先做static,然後就是main,而不是像其它類一樣,除了static就按順序做下來。如,在main函數中,如果去掉語句ExplicitStatic x=new ExplicitStatic(),則Cups c=new Cups()和System.out.println("hello")都不會執行。另外,留個小問題,如果去掉了System.out.println("hello")外的括號會怎麽樣呢?

  java在初始化的時候也有很多講究,因爲java中出現了類,所以在初始化的時候就有可能使用到創建新對象,所以,對于初始化的順序要求的比較嚴格,請看下面一個程序,是thinking in java中的一個程序,被我稍加改編,這樣可以更好的說明幾個初始化的要點:   class Cup   {   Cup(int marker)   {   System.out.println("Cup(" + marker + ")");   }   void f(int marker)   {   System.out.println("f(" + marker + ")");   }   }   class Cups   {   static Cup c1=new Cup(1);   Cup c3=new Cup(3);   static Cup c2= new Cup(2);   Cups()   {   System.out.println("Cups()");   }   Cup c4=new Cup(4);   }   public class ExplicitStatic   {   Cups c=new Cups();   {   System.out.println("Hello");   }   public static void main(String[] args)   {   System.out.println("Inside main()");   Cups.c1.f(99);   ExplicitStatic x=new ExplicitStatic();   }   static Cups x = new Cups();   }   大家可以手動執行一下這個程序,考慮一下結果是什麽,然後參照下面的答案對照一下,看看是否正確:   Cup(1)   Cup(2)   Cup(3)   Cup(4)   Cups()   Inside main()   f(99)   Cup(3)   Cup(4)   Cups()   Hello   我總結了四個初始化的要點,如下:   1、如果有static,即靜態成員定義,首先初始化static的變量,如,在類Cups中c3在c2前面,可是在輸出的結果中,你可以發現,c2是在c3前執行的,這就是因爲,所有的static都在第一時間被初始化。   2、Static只初始化一次,在第二次創建類的對象的時候,就不會去執行static的語句,如,在第二次執行new Cups()的時候,就只輸出了Cup(3)和Cup(4),顯然,static的兩個創建對象的語句沒有做。   3、變量的初始化在方法前。如,在Cups類中,方法Cups()在語句Cup c4=new Cup(4)之前,可是輸出結果的時候,打印的Cups()卻在Cup(4)之後。   4、在含有main的類中執行順序是先做static,然後就是main,而不是像其它類一樣,除了static就按順序做下來。如,在main函數中,如果去掉語句ExplicitStatic x=new ExplicitStatic(),則Cups c=new Cups()和System.out.println("hello")都不會執行。另外,留個小問題,如果去掉了System.out.println("hello")外的括號會怎麽樣呢?
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有