初識面向對象(成員變量和局部變量)

概述

面向對象,就是先把具有相同特徵和功能的一類事物,抽出相同特性寫成一個抽象的類,再創建這個類類型的對象,每個對象就是一個個體,擁有之前類中定義的屬性和方法,不同的對象相同屬性的值可以不同。

面向對象比較強調把一些功能封裝到一個對象裏,讓這個對象去完成相應功能,但具體如何完成的細節不用去管。

比如,一輛黑色汽車跟一輛白色汽車,都是兩個個體,但它們都是汽車,都有顏色這個屬性,只是顏色不同而已。然後黑車跟白車都有“到加油站去加油”這個行爲即方法, 需要加油時,調用 “黑車.去加油” 就好了,具體走哪條路去的加油站這個就不用管了,忽略了細節。

我們可以定義一個類,這個類封裝了所有汽車的共同屬性和行爲,然後再創建一個這個類的實例,即對象

代碼分析

class Car {      //定義一個類,這個類封裝了汽車這類事物的共性。
    String color;
    int num;
    color = "red";
    num = 4;
    void show() {
        System.out.print(color+" "+num);
    }
}
//創建一個Car對象,這個對象是上面那個類的個體。
class Demo {          
    public static void main(String[] args) {
        Car c = new Car();  //創建一個Car類型的對象,存儲在堆內存
        c.color = "black";  //把這個對象的color屬性修改爲“black”
        c.show;  //使用這個對象的show()函數,函數中封裝功能
    }
}

內存圖解


內存分析

(1)創建對象時,先在堆內存中給對象分配一個內存空間,假如這個空間地址爲0x0034。

(2)在這個空間中,創建一個對象,並定義兩個成員變量,爲 color 和 num (成員變量隨着對象的建立而建立,存在於堆內存中,且有默認初始化值),color 初始化爲 "red" ,num 初始化爲 4。

(3)在棧內存中分配一個內存空間給局部變量 c,並把對象的內存地址賦給變量c,即把 0x0034 賦給 c。變量 c 即通過這個內存地址,指向了堆內存中的對象。

(4)c.color = "black";  即通過c指向堆內存中的對象,把對象的 color 變量改爲"black"。

(5)c.show();  調用對象的 show() 方法。

匿名對象

匿名對象是對象的簡化形式,匿名對象的兩種使用情況:

(1)當對對象的方法僅進行一次調用時。

(2)匿名對象可作爲函數的實際參數進行傳遞。

第一種情況:

new Car().num = 5;        //第一種情況,對對象僅進行一次調用。
new Car().color = "black";//實際是創建了兩個對象
第二種情況:

class Test{} {
    public static void main(String[] args) {
        turn(new Car());   //turn()函數調用了Car類型對象,當調用完畢時,此對象不被調用則成爲垃圾。
    }
    public static void turn(Car c) {
        c.num = 3;
        c.color = "black";
    }
}

成員變量:

(1)成員變量定義在類中,在整個類中都可以被訪問。

(2)成員變量隨着對象的建立而建立,存在於對象所在的堆內存中。

(3)成員變量有默認初始化值。

局部變量:

(1)局部變量只定義在局部範圍內,如:函數內、語句內。

(2)局部變量存在於棧內存中,且作用的範圍結束,變量空間會自動釋放。

(3)局部變量沒有默認初始化值。


發佈了39 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章