天天看點

對象的建立與調用

對象的建立

  類是對象的模闆,模闆可以造就很多對象。new關鍵字則是用來建立對象的,需要将對象建立才能通路調用裡面的屬性和方法。

  例如:

<a href="https://s2.51cto.com/wyfs02/M00/08/D3/wKiom1nng7yz8AXHABA4o5Wifqg495.png" target="_blank"></a>

  用Dog類名作為類型申請一個dog的變量名用來儲存建構出來的對象,new Dog();才是真正建構對象的代碼。就像聲明變量一樣,把new好的對象指派到dog這個辨別符,以後隻需要使用dog就可以調用通路對象裡面的屬性和方法。

  每使用一次new關鍵字都是在記憶體中新開辟一個記憶體位址,如果new兩個對象并交給不一樣的變量名,它們指向的是各自獨立的記憶體位址。例如:

<a href="https://s2.51cto.com/wyfs02/M02/A7/82/wKioL1nngRKyXieiABGRKLGk-_M916.png" target="_blank"></a>

 每new一次就是建立一個記憶體位址,記憶體圖:

<a href="https://s4.51cto.com/wyfs02/M01/08/D3/wKiom1nng82RvOkoAApE0C77xM0663.png" target="_blank"></a>

一個變量名隻能指派一次對象,不然會報錯。

通路符号  .

  .用于通路對象的成員,也就是屬性和行為。用變量名加上 . 就可以對對象進行調用了。例如:

<a href="https://s4.51cto.com/wyfs02/M00/A7/82/wKioL1nngSGAJLd5ABCUuKANKvw753.png" target="_blank"></a>

  對對象裡的成員進行了一個簡單的通路調用。通路dog指向的對象記憶體中的size屬性并指派為3,并且調用了對象的play方法。

 如果new了兩個對象,因為它們的記憶體位址都是獨立的,修改了其中一個對象成員的值,另一個不會受到影響。例如:

<a href="https://s4.51cto.com/wyfs02/M01/08/D3/wKiom1nng97AxDRFAAyFZylk0pE099.png" target="_blank"></a>

  如果把一個對象指派給另一個對象,此時它們都是指向的同一個記憶體位址,一個發生改變另一個也會發生改變,因為對象是按引用傳遞的。例如:

<a href="https://s1.51cto.com/wyfs02/M00/A7/82/wKioL1nngS_jNwoeAA02ocJYdKg798.png" target="_blank"></a>

  因為dog指派給了dog1,是以dog1指向的是dog的記憶體位址。是以dog1的值改變了dog的值也會改變。

<a href="https://s2.51cto.com/wyfs02/M00/08/D3/wKiom1nng-uCHMYoAAqKzBpoky8589.png" target="_blank"></a>

  在Java裡因為有虛拟機,有垃圾自帶回收機制,沒有作用的對象就會被虛拟機回收掉。

<a href="https://s3.51cto.com/wyfs02/M01/A7/82/wKioL1nngTuRJH0lAAl9-BZuohs047.png" target="_blank"></a>

本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1974033,如需轉載請自行聯系原作者

繼續閱讀