日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA_SE基础——24.面向对象的内存分析

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA_SE基础——24.面向对象的内存分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

黑馬程序猿入學blog ...


接著上一章的代碼:

//車類 class Car{//事物的公共屬性使用成員變量描寫敘述。

String name; //名字的屬性 String color; //顏色屬性 int wheel; //輪子數 //事物的公共行為使用函數描寫敘述。 public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args) { //使用了Car類聲明了一c變量, c變量指向了一個車對象。

Car c = new Car(); //設置車對象的屬性值。 c.name = "BMW"; c.color = "白色"; c.wheel = 4; //訪問車對象的屬性值 System.out.println("名字:"+ c.name+" 顏色:"+ c.color+" 輪子數:"+c.wheel); c.run(); } }

結果是:

名字:BMW 顏色:白色 輪子數:4

BMW飛快的跑起來了



上面代碼在內存中是怎么執行的呢?

以下我來給大家分析下:


c是局部變量

1.先聲明了c變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值,為name=null。color=null。wheel=0? ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c ? ? ? c就指向了車的這個對象。

3.

c.name ?就是c拿著地址找到車的對象 ? 然后把name改成BMW. ? ? ??

c.color 就是c拿著地址找到車的對象 ? 然后把color?改成白色.

c.wheel?就是c拿著地址找到車的對象 ? 然后把wheel改成4.



以下再看個樣例:

//車類 class Car{//事物的公共屬性使用成員變量描寫敘述。String name; //名字的屬性String color; //顏色屬性int wheel; //輪子數//事物的公共行為使用函數描寫敘述。

public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args) { Car c1 = new Car(); Car c2 = new Car(); c1.name = "寶馬"; c2.name = "大眾"; System.out.println("名字:"+ c1.name); } }

結果:名字:寶馬

看下圖解釋:

1.先聲明了c1變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值,為name=null,color=null。wheel=0 ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c1 ? ? ? c1就指向了車的這個對象。

3.再聲明了c2變量 分配在棧內存

4.再new 一個 Car ?在堆內存再創建了一個車對象 ?看看Car有那些成員屬性。然后再給對象分配初始值。為name=null,color=null,wheel=0 ? ?(成員一旦創建,對象的成員變量也會立即分配默認的初始值) ?然后把地址0x67賦給了c2 ? ? ? c2就指向了車的這個對象。

5. ? ? ? ? ? c1.name ?就是c1拿著地址找到車的對象 ? 然后把name改成" 寶馬 " ? ?

6. ? ? ? ? ? c2.name ?就是c2拿著地址找到車的對象 ? 然后把name改成“ 大眾 ”

7. ? ? ? ? ? ?最后輸出c1.name ? ? ? ? ? ?c1就拿著地址找到相應的對象 ?輸出了那個對象的name ?

所以結果是:寶馬

以下再把這個樣例改下:

//車類 class Car{//事物的公共屬性使用成員變量描寫敘述。String name; //名字的屬性String color; //顏色屬性int wheel; //輪子數//事物的公共行為使用函數描寫敘述。

public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args){ Car c1 = new Car(); c1.name = "寶馬"; Car c2 = new Car(); c2.name = "大眾"; c1 = c2; System.out.println("名字:"+ c1.name); } }

結果:大眾

下圖解釋:


1.先聲明了c1變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性。然后再給對象分配初始值,為name=null,color=null,wheel=0 ? ?(成員一旦創建,對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c1 ? ? ? c1就指向了車的這個對象。

3. ? ? ? ? ? c1.name ?就是c1拿著地址找到車的對象 ? 然后把name改成" 寶馬 " ?

4.再聲明了c2變量 分配在棧內存??

5.再new 一個 Car ?在堆內存再創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值。為name=null,color=null,wheel=0 ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x67賦給了c2 ? ? ? c2就指向了車的這個對象。

6. ? ? ? ? ? c2.name ?就是c2拿著地址找到車的對象 ? 然后把name改成“ 大眾 ”

7.把c2的持有地址賦給了c1 ? ? ? c1的地址原來是0x97 改為 0x67 ? ?

8. ?最后輸出c1.name ? ? ? ??c1拿著改后的地址去找地址為0x67的對象 ? ? ? ?輸出為0x67地址的對象中的屬性name.

所以結果為;大眾

總結

以上是生活随笔為你收集整理的JAVA_SE基础——24.面向对象的内存分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。