關於對象實例的一些新手問題

java中我們使用new開闢一個類對象,比如 person類創建一個對象:person  men = new person();

那麼這裏的new具體的作用是什麼呢?

  1. 首先我們要明確person  men是父類的一個引用,但是它只是一個引用,並沒有實際在堆中分配空間。

  2. 其次我們就要明確此時的new person()的作用了:new是在堆中爲對象men申請了一塊空間。其中new實際是在調用父類的構造方法。

java中的內存分配是對用戶透明的,也就是所有的內存分配回收不用你來處理,而是由java虛擬機來操作。
new關鍵字的作用就是在你聲明瞭一個對象後,給對象分配相應內存。

http://static.oschina.net/uploads/space/2015/0107/002354_4LSI_2298764.jpg


注意:上面紅色的句子,當我們創建一個類的實例時,實際上已經調用了類的構造方法,這是自動運行的。可以看看下面的代碼,


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();語句,即構造方法。


上面就是我的理解,我不知道到底對不對,希望大家指點我的正誤,讓我更好的進步,謝謝~





































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章