黑馬程序猿入學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.
所以結果為;大眾