1. 程式人生 > >第五周動手動腦

第五周動手動腦

字段 參數 分配 就會 lai 兩個 而且 接收 space

1.早期經常這樣定義變量:int value=100;

前面的這樣定義:myclass obj=new myclass();

這兩種方式定義的變量是一樣的嗎?

答:當聲明一個對象類型的變量時,實際上並沒有創建一個對象,此變量=null。//myclass obj=new myclass();

定義一個原始類型的變量時,會馬上給其分配內存 //int value=100;

2.以下代碼為何無法通過編譯?哪兒出錯了?

public class Test

{ public static void main(String[] angs) { Foo objl=new Foo(); } } class
Foo{ int value; public Foo(int initValue) { value=initValue; } }

答:構造函數Foo未定義。

結論:如果類提供了一個自定義的構造方法,將導致系統不再提供默認構造方法。

3.以下代碼輸出結果是什麽?

class InitializeBlockClass{
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){}


public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);//?
obj=new InitializeBlockClass(300);
System.out.println(obj.field);//?
}
}

結果:

100

300

結論:java字段初始化規律:

Java進行初始化的地方有兩個:初始化塊和構造函數,其中初始化塊又分為靜態初始化塊和實例初始化塊。

靜態初始化塊是類中由static修飾的初始化塊,實例初始化塊為類中沒有任何關鍵字修飾的初始化語句。

如果在主函數中創建對象時沒有形參時,如果在類中定義了公共的變量並給與了賦值,那麽就會把值賦給主函數中的變量,再調用類中的默認構造函數,

如果在主函數中創建對象時有形參,則調用類中對應的構造函數。

類的初始化塊不接收任何的參數,而且只要一創建類的對象,它們就會被執行。因此,適合於封裝那些“對象創建時必須執行的代碼”。

4.運行以下代碼,觀察輸出結果,總結出“靜態初始化塊的執行順序”。

技術分享圖片

技術分享圖片

技術分享圖片

靜態初始化塊的執行順序:

1.靜態初始化塊只執行一次。

2.創建子類型的對象時,也會導致父類型的靜態初始化塊的執行。

5.技術分享圖片

第五周動手動腦