這個問題已經有人討論過,最近在Java版再次被人提出來了。
疑問在于如下的代碼:
=("");
從語法上講,構造函數不允許有返回值,就算是 void 也不行。
這里的new 是調用構造函數,在堆里分配了一個對象構造方法沒有返回類型,并讓str指向這個對象。實際上是那個 new 在起作用,而不是()在起作用。
下面是因為原版說明,有興趣的自己看吧
For other than , can . are of that can be used an the to the is bynew. have the same name as the class they . , they take zero or more , but are and thus have no type. , if any, are the that the type name when the with new. after the of a newly ofthe class have been their and are .
We the sun to using new. The new is byfar the most way to (we cover the other ways 16). When you an with new, you the you want to and any for its .The space to store the of and it in ways you will soon see. When is , the a to the new .
下面是構造方法的一些特點總結
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。
(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。
(4)構造方法不能由編程人員調用,而要系統調用。
(5)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構 造器構造方法沒有返回類型,這個構造器不執行任何代碼。
(6)構造方法可以重載,以參數的個數,類型,或排列順序區分。
當然
(){}
這個算一個普通的方法,雖然和類重名,但卻是合法的普通方法,而不是構造方法了。
如下的類可以正常編譯并運行,結果正確。請注意構造方法里面的;
{(){ ; // 請注意這里的哦,這是合法的語句
}(){"特殊的方法,和類名相同";}([]args){.out.(newT().T());}}
從另一個角度看,正是因為構造函數沒有返回值才需要這么寫:
=("");
否則,如果有返回值,應該如下寫:
=("");
當然了,那個是一個普通的方法,不再是構造方法了。原因看前面的例子。
結論:
構造函數/方法/構造器, 沒有返回值。以后就別討論這個了,呵呵。
討論地址: