建構函式有沒有返回值:
它是用來對類物件的一些欄位進行初始化用的,所以沒有必要有返回值。
在建構函式執行的時候,可以使用this,所以說在執行建構函式的時候,類物件已經存在了,更說明類物件不是建構函式建立的,而是new運算子建立的。
疑問在於如下的程式碼:
String str = new String(content);
new 的時候呼叫建構函式,返回給str;
從語法上講,建構函式不允許有返回值,就算是 void 也不行。
這裡的new 是呼叫建構函式,在堆裡分配了一個String物件,並讓str指向這個物件。實際上是那個 new 在起作用,而不是()在起作用。
下面是因為原版說明,有興趣的自己看吧
下面是構造方法的一些特點總結
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回型別,也不能定義為void,在方法名前面不宣告方法型別。
(3)構造方法的主要作用是完成物件的初始化工作,它能夠把定義物件時的引數傳給物件的域。
(4)構造方法不能由程式設計人員呼叫,而要系統呼叫。
(5)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無引數的預設構 造器,這個構造器不執行任何程式碼。
(6)構造方法可以過載,以引數的個數,型別,或排列順序區分。
當然
public Long String(){ }
這個算一個普通的方法,雖然和類重名,但卻是合法的普通方法,而不是構造方法了。
如下的類可以正常編譯並執行,結果正確。請注意構造方法裡面的return;
public class T {
public T() {
return; // 請注意這裡的return哦,這是合法的語句
}
public String T() {
return 特殊的方法,和類名相同;
public static void main(String[] args) {
System.out.println(new T().T());
從另一個角度看,正是因為建構函式沒有返回值才需要這麼寫:
否則,如果有返回值,應該如下寫:
String str = String(content);
建構函式有沒有返回值:
它是用來對類物件的一些欄位進行初始化用的,所以沒有必要有返回值。
在建構函式執行的時候,可以使用this,所以說在執行建構函式的時候,類物件已經存在了,更說明類物件不是建構函式建立的,而是new運算子建立的。
疑問在於如下的程式碼:
String str = new String(content);
new 的時候呼叫建構函式,返回給str;
從語法上講,建構函式不允許有返回值,就算是 void 也不行。
這裡的new 是呼叫建構函式,在堆裡分配了一個String物件,並讓str指向這個物件。實際上是那個 new 在起作用,而不是()在起作用。
下面是因為原版說明,有興趣的自己看吧
下面是構造方法的一些特點總結
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回型別,也不能定義為void,在方法名前面不宣告方法型別。
(3)構造方法的主要作用是完成物件的初始化工作,它能夠把定義物件時的引數傳給物件的域。
(4)構造方法不能由程式設計人員呼叫,而要系統呼叫。
(5)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無引數的預設構 造器,這個構造器不執行任何程式碼。
(6)構造方法可以過載,以引數的個數,型別,或排列順序區分。
當然
public Long String(){ }
這個算一個普通的方法,雖然和類重名,但卻是合法的普通方法,而不是構造方法了。
如下的類可以正常編譯並執行,結果正確。請注意構造方法裡面的return;
public class T {
public T() {
return; // 請注意這裡的return哦,這是合法的語句
}
public String T() {
return 特殊的方法,和類名相同;
}
public static void main(String[] args) {
System.out.println(new T().T());
}
}
從另一個角度看,正是因為建構函式沒有返回值才需要這麼寫:
String str = new String(content);
否則,如果有返回值,應該如下寫:
String str = String(content);