java中我們使用new開闢一個類對象,比如 person類創建一個對象:person men = new person();那麼這裏的new具體的作用是什麼呢?
首先我們要明確person men是父類的一個引用,但是它只是一個引用,並沒有實際在堆中分配空間。
其次我們就要明確此時的new person()的作用了:new是在堆中爲對象men申請了一塊空間。其中new實際是在調用父類的構造方法。
java中的內存分配是對用戶透明的,也就是所有的內存分配回收不用你來處理,而是由java虛擬機來操作。 new關鍵字的作用就是在你聲明瞭一個對象後,給對象分配相應內存。
注意:上面紅色的句子,當我們創建一個類的實例時,實際上已經調用了類的構造方法,這是自動運行的。可以看看下面的代碼,
public class Answer
{
public static String str = null;
public Answer(String str){
this.str = str;
}
public static void main(String[] args){
Answer t = new Answer("該字符常被顯示出來了");
System.out.println(str);
}
}下面有一點問題,就是我們創建的這個實例,如果不去使用引用,那它是否就永遠在那裏沒有變化呢?
(此圖片來自Thinking in Java fouth edition.)
普通方法調用才能執行,構造方法調用能夠給你帶來很多“意想不到的事情”,必須理解好構造方法的原理。
說實話我還是新手,我對裏面window(1),window(2),window(3)爲什麼會出來還是不能很好理解。
關於引用必須初始化,我們一般如果不動,初始化就是null,難道賦了初值,我們就要執行引用指向的那個內存地址嗎?這一點還是比較難理解,原理是什麼?當然,如果就是這樣規定的,那我就沒啥說的了,記住就好,不過有說法那最好不過了。
就我的理解,就是當執行窗口到了House h = new House;這個語句時,調用House類的構造方法,但是,因爲House類裏面有屬性變量,所以我們先對其進行初始化,於是又開始執行w1引用,這個引用指向了window(1)構造方法創建的實例,於是又打印出來了window(1),又由於House類裏面所有的屬性變量初始化必須在構造方法之前,於是開始執行w2,w3接下來就執行House();語句,即構造方法。
上面就是我的理解,我不知道到底對不對,希望大家指點我的正誤,讓我更好的進步,謝謝~
關於對象實例的一些新手問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.