為什么java的構造方法中this()或者super()要放在第一行


看Head First Java 256頁 ,書中提到“this()只能用在構造函數中,且它必須是第一行語句!”,不明白原因,查資料發現知乎已經有相關問題,搬運過來做個記錄。

 

https://www.zhihu.com/question/47012546/

 

1:

 

 

在構造函數中,如果你不指定構造器之間的調用關系,那么編譯器會給你加上super();目的是在初始化當前對象時,先保證了父類對象先初始化。所以,你指定了構造函數間的調用,那么this()必須在第一行,以保證在執行任何動作前,對象已經完成了初始化。

構造函數只能被構造函數調用,因為對象只會初始化一次。

 

作者:吾名崔大帥

鏈接:https://www.zhihu.com/question/47012546/answer/104001846

來源:知乎

 

2:

解答這個問題,首先要明確一下構造方法和普通成員方法的區別。

 

類似this()和super()這樣的方法被稱為構造方法,顧名思義,他的作用就是在JVM堆中構建出一個指定類型的對象,如果你調用了兩個這種形式的方法,豈不是代表着構建出了兩個對象。

 

同理,為了避免構建出兩個對象這種問題的出現,Java在編譯時對這種情況做了強校驗,用戶不能再同一個方法內調用多次this()或super(),同時為了避免對對象本身進行操作時,對象本身還未構建成功(也就找不到對應對象),所以對this()或super()的調用只能在構造方法中的第一行實現,防止異常。

 

在普通的成員方法中,如果調用super()或者this(),你是想要重新創建一個對象嗎?抱歉Java為了保證自身對象的合理性,不允許你做這樣的操作。

 

 

作者:Kifile

鏈接:https://www.zhihu.com/question/47012546/answer/104002471

來源:知乎

 

總結:

this()和super()為構造方法,作用是在JVM堆中構建出一個對象。因此避免多次創建對象,同一個方法內只能調用一次this()或super()。同時為了避免操作對象時對象還未構建成功,需要this()和super()的調用在第一行實現【以此來創建對象】,防止異常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM