Java開發筆記(四十六)類的構造方法

前面介紹瞭如何定義一個簡單的類,以及它的成員屬性和成員方法,從示例代碼能夠看到,無論是OrangeSimple仍是OrangeMember,都要先利用關鍵字new建立一個實例,而後才能經過實例名稱訪問成員屬性和成員方法。不知道你們有沒有注意到,new後面的類名跟着一副圓括號,就像下面代碼這樣:html

		// 建立OrangeMember的一個實例
		OrangeMember orange = new OrangeMember();

 

可圓括號一般是方法的標配呀,爲啥類名後面也能直接跟着圓括號呢?這是由於,類定義除了成員屬性和成員方法,還有一種構造方法,構造方法的用途是構建並返回該類的實例。好比「OrangeMember()」實際上對應的是類定義中的下述構造方法:java

	// 默認的構造方法
	public OrangeMember() {
	}

 

因爲構造方法就是要給外部建立實例用的,所以必須聲明爲public對外開放;同時構造方法的返回值固定是該類的實例,便沒必要重複寫明它的返回值;至於類名後面的一對圓括號及一對花括號,顯然與普通方法的定義保持一致。可是以前OrangeSimple和OrangeMember的類定義都沒有看到它們的構造方法,這又是何故?原來上述形如「類名()」的構造方法,實際上是默認的構造方法,即便程序員未在類定義中寫明該方法,Java在編譯之時也會自動補上默認的構造方法,因此對於簡單的類定義來講,不寫這個默認的構造方法,也不影響類的正常使用。
既然構造方法擁有一對圓括號,就意味着它容許定義輸入參數,而且花括號內部也支持填寫業務邏輯代碼。假如從新定義一個橘子類OrangeConstruct,同時編寫帶有輸入參數的構造方法,且輸入參數爲產地字段,則該類的構造方法應當書寫以下:程序員

	// 只有一個輸入參數的構造方法
	public OrangeConstruct(String inputPlace) {
		place = inputPlace;
		if (place.equals("淮北")) {
			name = "枳子";
		} else {
			name = "橘子";
		}
	}

 

若是須要其它的輸入參數,也可定義輸入參數各異的另外一個構造方法,就像普通方法的重載操做那樣。例如再定義一個擁有三個輸入參數的構造方法,在方法內部對成員屬性加以賦值,此時新構造方法的實現代碼以下所示:htm

	// 擁有三個輸入參數的構造方法
	public OrangeConstruct(String inputPlace, double inputWeight, boolean inputRipe) {
		place = inputPlace;
		if (place.equals("淮北")) {
			name = "枳子";
		} else {
			name = "橘子";
		}
		weight = inputWeight;
		isRipe = inputRipe;
	}

 

對於輸入參數非空的構造方法,外部調用的時候,一樣把參數字段依次填寫便可,具體的調用代碼示例以下:blog

	// 演示OrangeConstruct類的調用
	private static void testConstruct() {
		// 建立OrangeConstruct的一個實例
		OrangeConstruct orange = new OrangeConstruct("淮北", 100, false);
		// 打印該實例的詳細信息
		System.out.println(orange.toString());
	}

 

須要注意的是,一旦定義了帶輸入參數的構造方法,Java在編譯之時就不會自動補上默認的構造方法。此時若想繼續使用默認的構造方法,就得在類定義中寫明不帶參數的構造方法。ip



更多Java技術文章參見《Java開發筆記(序)章節目錄開發

相關文章
相關標籤/搜索