在許多情況下,Java編譯器會生成構造函數並注入超級構造函數調用。是否可以禁用隱式構造函數方法/調用的注入?
例如,
class Foo {
Foo() {}
}
成爲
class Foo {
Foo() {
super();
}
}
我並不熱衷於在不同的環境下,我想使代碼明確。
如果可能的話,如何禁止Java編譯器執行此操作?
在許多情況下,Java編譯器會生成構造函數並注入超級構造函數調用。是否可以禁用隱式構造函數方法/調用的注入?
例如,
class Foo {
Foo() {}
}
成爲
class Foo {
Foo() {
super();
}
}
我並不熱衷於在不同的環境下,我想使代碼明確。
如果可能的話,如何禁止Java編譯器執行此操作?
您不能禁止Java編譯器調用super - 這是如何在Java中設計面向對象的核心原則之一。
您可能但是能夠告訴您的IDE始終顯示這些調用(或不)。
然而我建議堅持使用標準 - 每一個Java開發人員都知道這件事,什麼可能看起來有些奇怪和陌生到現在你將成爲一個很短的時間後完全合理... :)
通過讓IDE顯示呼叫,你是什麼意思? –
我的意思是通常一個IDE會像你的第一個片段一樣顯示代碼。但可能會有一個設置讓它看起來像你的第二個片段。我隱約記得,我在Eclipse中看到了一些相關的東西,但必須承認簡單的谷歌搜索沒有產生任何結果;) –
默認構造函數。如果您沒有爲某個類定義構造函數,那麼編譯器會自動創建一個默認的無參數構造函數。默認構造函數調用默認的父構造函數(super()),並將所有實例變量初始化爲默認值(數字類型爲零,對象引用爲null,布爾值爲false)。
僅當沒有構造函數時纔會創建默認構造函數。如果您爲您的類定義了任何構造函數,則不會自動創建默認構造函數。
任何子類構造函數中的第一條語句是ALWAYS super()。沒有必要調用它,因爲如果超類有一個沒有參數的默認構造函數,它將自動提供。
如果父類沒有默認構造函數,則必須添加超級(params)調用。
如果沒有明確擴展任何類,記住所有類將隱含擴展Object
10 Java是否會生成對顯式定義的零參數構造函數的調用?術語「默認構造函數」是指任何零參數構造函數還是僅指隱式生成的零參數構造函數? –
是的,它會的。 「默認構造函數」是顯式定義或隱式生成的零參數構造函數。不要緊。 – alfcope
不是按照[答案](http:// stackoverflow。com/a/4488766/881334)和相應的Java語言規範[摘錄](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9) 。 –
請分享一些代碼片段。 – Braj
@Braj我剛加了一些。 –
試試這個'class Foo {Foo(int x){}}' – Braj