第五周動手動腦
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.
第五周動手動腦