我的理解是這樣的:Java中,構造函數是用來實例化對象的,實例化時必定有確定的引用變量。但在調用靜態函數時編譯器還是通過解析原來的類來調用靜態方法,不通過對象。因此構造函數不能是靜態的。這種理解正確嗎?
2 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
我覺得,是類方法(靜態方法)還是實例方法,關鍵是:這個方法是否需要類的某個具體實例的存在,這個方法是否需要作用在類某個具體實例上。說白了就是是否需要this
的存在。
構造方法就是在類的實例產生后,對這個新生的特定的實例對象進行初始化的,當然類似于實例方法,而不是類方法。

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
構造函數的意義是什么?
主要的作用其實就是初始化一些實例屬性,現在將構造函數設計成靜態的,那么勢必會出現靜態方法訪問實例屬性的情況。
解決方案有兩種:
1.JVM可以為靜態構造函數隱式的增加一個對對象的引用,就像內部類有一個隱式的對外部類的引用一樣,然后通過這個引用訪問對象的實例屬性,但是從代碼是看不出來的,這樣的話就與Java語言的規范出現沖突:靜態方法不可訪問實例域,所以不可取。
2.使用像python那種解決方法,構造函數的第一個參數默認就是對對象的引用,如self,然后訪問對象的實例域就通過self進行訪問,但是這種代碼符合Java的風格嗎?會被吐槽死吧
所以為啥不直接使用實例方法呢,多方便
添加回答
舉報
0/150
提交
取消