为什么Java中不能有静态的构造函数?
黄舟
黄舟 2017-04-17 16:28:37
0
2
429

我的理解是这样的:Java中,构造函数是用来实例化对象的,实例化时必定有确定的引用变量。但在调用静态函数时编译器还是通过解析原来的类来调用静态方法,不通过对象。因此构造函数不能是静态的。
这种理解正确吗?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
巴扎黑

我覺得,是類別方法(靜態方法)還是實例方法,關鍵是:這個方法是否需要類別的某個具體實例的存在,這個方法是否需要作用在類別某個具體實例上。說穿了就是是否需要this的存在。

建構方法就是在類別的實例產生後,對這個新生的特定的實例物件進行初始化的,當然類似於實例方法,而不是類別方法。

迷茫

構造函數的意義是什麼?
主要的作用其實就是初始化一些實例屬性,現在將建構子設計成靜態的,那麼勢必會出現靜態方法存取實例屬性的情況。
解決方案有兩種:
1.JVM可以為靜態建構函數隱式的增加一個對物件的引用,就像內部類別有一個隱式的對外部類別的引用一樣,然後透過這個引用存取物件的實例屬性,但是從程式碼是看不出來的,這樣的話就與Java語言的規範出現衝突:靜態方法無法存取實例域,所以不可取。
2.使用像python那種解決方法,建構函數的第一個參數預設就是對物件的引用,如self,然後訪問物件的實例域就透過self進行訪問,但是這種程式碼符合Java的風格嗎?會被吐槽死吧

所以為啥不直接使用實例方法呢,多方便

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!