1. 程式人生 > >第三講類與對象

第三講類與對象

spa println integer 無法 sys 創建子類 of函數 一個 mar

【動手動腦】

技術分享

錯誤分析:

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

源程序中並沒有Foo()此構造函數,所以無法實現,所以需要再寫一個構造函數。

【自找麻煩】

技術分享

總結

首先,在main函數中先調用不同的構造函數。對於初始化板塊,源程序運行會自行覆蓋,所以把int field與初始化板塊交換順序,最後輸出就是200。

執行類成員定義時指定的默認值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。

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

【動手動腦】

技術分享

總結:

靜態初始化塊只執行一次。因為靜態初始化板塊只會在第一次裝入系統的時候運行,當再次實例化的時候就不需要再執行了,因為已經存在了。

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

【一個有趣的問題】

驗證:

//信1605-2班 那穎 20163448

public class Verify

{

private int x=9;

public static void display()

{

Verify v=new Verify();

System.out.println(v.x);

}

public static void main(String[] args)

{

display();

}

public void get(int n)

{

x=n;

}

}

【課後作業1】

源程序:

//信1605-2 那穎 20163448

import java.util.Scanner;

class Number

{

static int number=0;

static void display()

{

++number;

System.out.println("At present now it has created "+number+" objects.");

}

}

public class ReferCreateObject

{

public static void main(String[] args)

{

Scanner input=new Scanner(System.in);

String character=" ";

do

{

Number a=new Number();

a.display();

System.out.println("是否繼續創建新對象(Y/N)");

character=input.next();

}while(character.equals("Y"));

}

}

【運行結果】

技術分享

【思考Integer的“詭異”特性】

技術分享

使用javap反編譯在cmd中可以看到調用了Interger中的valueOf函數,因為Interger的適用範圍是-128到127,而129超過了該範圍。

第三講類與對象