1. 程式人生 > >Java學習記錄三

Java學習記錄三

    ①面向物件思想

      概述:當需求單一,或者簡單時,我們一步一步去操作沒問題,並且效率也挺高。可隨著需求的更改,功能的增多,發現需要面對每一個步驟很麻煩了,這時就開始思索,能不能把這些步驟和功能在進行封裝,封裝時根據不同的功能,進行不同的封裝,功能類似的封裝在一起。這樣結構就清晰了很多。用的時候,找到對應的類就可以了。這就是面向物件的思想。接下來我們看看面向物件到底是什麼?

      注:面向物件是基於面向過程的程式設計思想

      1)面向物件的思想特點:

          是一種更符合我們思想習慣的思想

          可以將複雜的事情簡單化

          將我們從執行者變成了指揮者

     2)面向物件開發

          

就是不斷的建立物件,使用物件,指揮物件做事情。

     3)面向物件設計

          其實就是在管理和維護物件之間的關係。

     4)面向物件特徵

          封裝(encapsulation)

          

繼承(inheritance)

          多型(polymorphism)

    5)類與物件的關係

      我們如何表示一個現實世界事物呢:

            屬性  就是該事物的描述資訊

            行為  就是該事物能夠做什麼

      Java中用class描述事物也是如此

            成員變數  就是事物的屬性

            成員方法  就是事物的行為

      類:是一組相關的屬性和行為的集合     Student.java

      物件:是該類事物的具體體現                new Student();

    6)物件記憶體圖。

        

     成員變數和區域性變數的區別

       在類中的位置不同

          成員變數 類中方法外

          區域性變數 方法內或者方法宣告上

       在記憶體中的位置不同

          成員變數 堆記憶體

          區域性變數 棧記憶體

       生命週期不同

          成員變數 隨著物件的存在而存在,隨著物件的消失而消失

          區域性變數 隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失

       初始化值不同

          成員變數 有預設的初始化值

          區域性變數 沒有預設的初始化值,必須先定義,賦值,才能使用。

    7)形式引數的問題

        基本型別作為形式引數 ----->值的傳遞,本身不受影響

        引用型別作為形式引數 ------>表達的是共同管理,本身是受影響的

    8)匿名物件:沒名字的物件,物件的一種簡化形式。

         使用場景:

                物件呼叫方法僅僅一次的時候

                作為實際引數傳遞

    9)封裝概述: 是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。

        好處:

                隱藏實現細節,提供公共的訪問方式

                提高了程式碼的複用性

                提高安全性。

        封裝原則:

                將不需要對外提供的內容都隱藏起來。

                把屬性隱藏,提供公共方法對其訪問。

       private 和 this

         •private修飾的成員只在本類中才能訪問。 提供對應的getXxx()/setXxx()方法

          this:代表所在類的物件引用

    10)構造方法:成員變數是有預設初始化,太大眾,通過構造可以有特點一些。

        構造方法作用概述

                給物件的資料進行初始化

        構造方法格式

                方法名與類名相同

                沒有返回值型別,連void都沒有

                沒有具體的返回值

        構造方法注意事項

                如果你不提供構造方法,系統會給出預設構造方法

                如果你提供了構造方法,系統將不再提供

                構造方法也是可以過載的

      11)成員方法

            方法具體劃分:

            根據返回值

              •有明確返回值方法

              •返回void型別的方法

          根據形式引數

              •無參方法

              •帶參方法

       12)類的初始化

       Student s = new Student();在記憶體中做了哪些事情?

              載入Student.class檔案進記憶體

              在棧記憶體為s開闢空間

              在堆記憶體為學生物件開闢空間

              對學生物件的成員變數進行預設初始化     -------->堆記憶體為成員變數賦的預設值

              對學生物件的成員變數進行顯示初始化     -------->這裡大概是值程式碼塊、靜態程式碼塊之類的初始化

              通過構造方法對學生物件的成員變數賦值    -------->構造初始化,只要通過構造初始化,就是有效的。

              學生物件初始化完畢,把物件地址賦值給s變數

       13)static關鍵字

         可以修飾成員變數和成員方法

         static關鍵字特點

              隨著類的載入而載入

              優先於物件存在

              被類的所有物件共享

              可以通過類名呼叫

       static關鍵字注意事項

              在靜態方法中是沒有this關鍵字的

              靜態方法只能訪問靜態的成員變數和靜態的成員方法

            靜態記憶體圖
           

           靜態變數和成員變數之間的區別。

            所屬不同

              靜態變數屬於類,所以也稱為為類變數

             成員變數屬於物件,所以也稱為例項變數(物件變數)

           記憶體中位置不同

             靜態變數儲存於方法區的靜態區

             成員變數儲存於堆記憶體

           記憶體出現時間不同

             靜態變數隨著類的載入而載入,隨著類的消失而消失

             成員變數隨著物件的建立而存在,隨著物件的消失而消失

           呼叫不同

             靜態變數可以通過類名呼叫,也可以通過物件呼叫

             成員變數只能通過物件名呼叫             

      14)製作幫助文件

              javadoc -d 存放目錄 -author -version ArrayTool.java

      15)如何使用幫助文件

          看這個類的結構(需不需要導包)

          成員變數  欄位

          構造方法  構造方法

          成員方法  方法

      16)程式碼塊

          Java中,使用{}括起來的程式碼被稱為程式碼塊,根據其位置和宣告的不同,可以分為區域性程式碼塊,構造程式碼塊,靜態程式碼塊,同步程式碼塊(多執行緒講解)

     區域性程式碼塊

          •在方法中出現;限定變數生命週期,及早釋放,提高記憶體利用率

     構造程式碼塊

          •在類中方法外出現;多個構造方法方法中相同的程式碼存放到一起,每次呼叫構造都執行,並且在構造方法前執行

     靜態程式碼塊 在類中方法外出現,加了static修飾

          •在類中方法外出現,並加上static修飾;用於給類進行初始化,在載入的時候就執行,並且值執行一次。