看Head First Java 256頁 ,書中提到「this()只能用在構造函數中,且它必須是第一行語句!」,不明白緣由,查資料發現知乎已經有相關問題,搬運過來作個記錄。函數
https://www.zhihu.com/question/47012546/this
1:對象
在構造函數中,若是你不指定構造器之間的調用關係,那麼編譯器會給你加上super();目的是在初始化當前對象時,先保證了父類對象先初始化。因此,你指定了構造函數間的調用,那麼this()必須在第一行,以保證在執行任何動做前,對象已經完成了初始化。編譯器
構造函數只能被構造函數調用,由於對象只會初始化一次。io
做者:吾名崔大帥編譯
連接:https://www.zhihu.com/question/47012546/answer/104001846file
來源:知乎構造函數
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()的調用在第一行實現【以此來建立對象】,防止異常。