我的理解是这样的:Java中,构造函数是用来实例化对象的,实例化时必定有确定的引用变量。但在调用静态函数时编译器还是通过解析原来的类来调用静态方法,不通过对象。因此构造函数不能是静态的。这种理解正确吗?
人生最曼妙的风景,竟是内心的淡定与从容!
我覺得,是類別方法(靜態方法)還是實例方法,關鍵是:這個方法是否需要類別的某個具體實例的存在,這個方法是否需要作用在類別某個具體實例上。說穿了就是是否需要this的存在。
this
建構方法就是在類別的實例產生後,對這個新生的特定的實例物件進行初始化的,當然類似於實例方法,而不是類別方法。
構造函數的意義是什麼? 主要的作用其實就是初始化一些實例屬性,現在將建構子設計成靜態的,那麼勢必會出現靜態方法存取實例屬性的情況。 解決方案有兩種:1.JVM可以為靜態建構函數隱式的增加一個對物件的引用,就像內部類別有一個隱式的對外部類別的引用一樣,然後透過這個引用存取物件的實例屬性,但是從程式碼是看不出來的,這樣的話就與Java語言的規範出現衝突:靜態方法無法存取實例域,所以不可取。 2.使用像python那種解決方法,建構函數的第一個參數預設就是對物件的引用,如self,然後訪問物件的實例域就透過self進行訪問,但是這種程式碼符合Java的風格嗎?會被吐槽死吧
所以為啥不直接使用實例方法呢,多方便
我覺得,是類別方法(靜態方法)還是實例方法,關鍵是:這個方法是否需要類別的某個具體實例的存在,這個方法是否需要作用在類別某個具體實例上。說穿了就是是否需要
this
的存在。建構方法就是在類別的實例產生後,對這個新生的特定的實例物件進行初始化的,當然類似於實例方法,而不是類別方法。
構造函數的意義是什麼?
主要的作用其實就是初始化一些實例屬性,現在將建構子設計成靜態的,那麼勢必會出現靜態方法存取實例屬性的情況。
解決方案有兩種:
1.JVM可以為靜態建構函數隱式的增加一個對物件的引用,就像內部類別有一個隱式的對外部類別的引用一樣,然後透過這個引用存取物件的實例屬性,但是從程式碼是看不出來的,這樣的話就與Java語言的規範出現衝突:靜態方法無法存取實例域,所以不可取。
2.使用像python那種解決方法,建構函數的第一個參數預設就是對物件的引用,如self,然後訪問物件的實例域就透過self進行訪問,但是這種程式碼符合Java的風格嗎?會被吐槽死吧
所以為啥不直接使用實例方法呢,多方便