Java對象與對象引用變量的理解


Java對象及對象引用

  首先定義一個簡單的類:

  class User{

    int userId;

    String userName;

  }

  我們在創建對象時,通常會寫:

     User user = new User();

  這個操作包含了四個動作。

  1)右邊的"new User",是以User為模板,在堆(heap)中創建一個User類對象(也可以說User對象)。

  2)末尾的()意味着,對象創建后,立刻調用User類的構造函數,對剛生成的對象進行初始化。構造函數肯定是有的,如果你沒有寫,Java會給你補上默認的構造函數。

  3)左邊"User user"創建了一個User類引用變量。User類引用就是以后可以用來指向User對象的對象引用。

  3)"="操作符使對象引用指向剛創建的那個User對象。

  為了更好的理解,拆分成兩步:

  User user;

  user = new User();

  功能效果是一樣的,這樣就比較清楚了,有兩個實體:一個是對象引用變量,一個是對象本身。

  一般引用是存放在棧(stack),對象存放在堆(heap)

  我們創建對象,為什么還要創建對象引用變量?

  因為創建的User對象是沒有名字的,可以認為是User類名稱(對象的創建模板)

  所以一個User類可以據此創建無數個對象,且這些對象不能全叫"User"。

  我們不能直接訪問,只能通過對象引用來間接訪問對象。

  理解到這里,拓展下這里的知識:

  For Example:

  User user_1 = new User();

  User user_2;

  user_2 = user_1;

  這里解釋下,user_2沒有指向對象,但是發生了復制行為,要說的是,對象沒有被復制,被復制的只是對象引用。結果是,user_2也指向了user_1所指向的對象。

  以此類推:

  user_2 = new User();

  則表示user_2引用變量修改指向第二個User對象。

  得出結論:

  1)一個對象引用可以指向一個或多個對象

  2)一個對象可以有N個引用指向它

  再拓展下:

  user_1 = user_2;

  現在user_1也指向了第二個User對象,那么第一個User對象吶?因為沒有被使用到,就會被Java垃圾回收處理機制回收了,至於什么時候回收,要看垃圾回收機制的策略或者心情了,就是等待JVM回收。

  以此類推,一些沒有引用指向的對象,都會被丟棄,等待JVM回收

  For Example:

  new User();

  System.out.println("Hello World!");

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM