搜尋

首頁  >  問答  >  主體

为什么Java中不能有静态的构造函数?

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

黄舟黄舟2766 天前432

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 16:30:37

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 16:30:37

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

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

    回覆
    0
  • 取消回覆