1. 程式人生 > >java第六天---面向物件、成員變數、成員方法、封裝

java第六天---面向物件、成員變數、成員方法、封裝

1 面向物件的特徵

封裝、繼承、多型

 

2 類與物件

        類:是一組相關的屬性和行為的集合      物件:是該類事物的具體體現

        成員變數    和以前定義變數是一樣的,只不過位置發生了改變。在類中,方法外。

        成員方法    和以前定義方法是一樣的,只不過把static去掉

3 檔名問題

        在一個java檔案中寫兩個類:一個基本的類,一個測試類。
        建議:檔名稱和測試類名稱一致。

4 一個物件、二個物件、三個物件的記憶體圖

一個物件

二個物件

三個物件

 

5 成員變數與區域性變數的區別

     A:在類中的位置不同
        成員變數:在類中方法外
        區域性變數:在方法定義中或者方法宣告上
    B:在記憶體中的位置不同
        成員變數:在堆記憶體
        區域性變數:在棧記憶體
    C:生命週期不同
        成員變數:隨著物件的建立而存在,隨著物件的消失而消失
        區域性變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
    D:初始化值不同
        成員變數:有預設初始化值
        區域性變數:沒有預設初始化值,必須定義,賦值,然後才能使用。

注意事項::    區域性變數名稱可以和成員變數名稱一樣,在方法中使用的時候,採用的是就近原則。如下圖:

 

6 引數傳遞問題

  
   形式引數
            基本型別:形式引數的改變不影響實際引數(可以理解成區域性變數的改變不影響全域性變數)
            引用型別:形式引數的改變直接影響實際引數


  方法的引數是類名
        如果你看到了一個方法的形式引數是一個類型別(引用型別),這裡其實需要的是該類的物件。

 

7 匿名物件

應用場景       

        呼叫方法,僅僅只呼叫一次的時候。
        匿名物件可以作為實際引數傳遞

 

8 this關鍵字

為什麼要有this:


        當我們的區域性變數和成員變數相同的時候,如果我們不使用this關鍵字,那麼會導致一個問題:

就是區域性變數隱藏了成員變數的問題。

 

9 記憶體分配及棧和堆的區別:


    棧: 存放的是區域性變數
        區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。

    堆: 存放的是所有new出來的東西

              1: 每一個new出來的東西都會為其分配一個地制值。
              2: 每一個變數都有一個預設的值
                                     byte,short,int,long  -- 0
                                     float,double                -- 0.0
                                     char                       -- '\u0000'
                                     boolean                 -- false
                                     引用資料型別     -- null        
             3: 使用完畢就變成了垃圾,等待垃圾回收器對其回收