1. 程式人生 > >面向物件基礎/static/this關鍵字/單例模式筆記

面向物件基礎/static/this關鍵字/單例模式筆記

第三章 面向物件 3.1 面向物件概念     舉例:大象裝進冰箱 開啟冰箱-->把大象放進去-->關上冰箱     面向過程:強調的是過程(動作即函式)         開啟冰箱 把大象放進去關上冰箱,是三個獨立的功能,三個函式         C語言就是面向過程的語言     面向物件:強調的物件(實體 )。         冰箱就是一個物件,具有開啟,儲存和關閉的功能。     特點:         1.是一種常見的思想,符合人們的思考習慣,只要面對一個物件,不能面對多個函式功能         2.將複雜的問題簡單化     3大特徵:封裝、繼承、多型 3.2 類與物件的關係     類:用java語言對現實生活中的事務進行描述。         通過類的形式來體現         對於事務描述一般只關注兩個方面 屬性和行為     類的構造:         1.成員變數——屬性         2.成員函式——行為

    物件:類中事物存在的個體。比如車是一個類 但有多輛車即多個物件         (該事物的例項) 在java中通過new來建立          物件的記憶體體現:

    成員變數和區域性變數的區別:     1.成員變數定義在類中,整個類中都可以訪問。     區域性變數定義在函式,語句,區域性程式碼塊中,只在所屬的區域有效     2.成員變數存在堆記憶體的物件中,     區域性變數存在於棧記憶體的方法中     3.成員變數隨著物件的建立而存在,隨著物件消失而消失     區域性變數隨著所屬區域的執行而存在,隨著所屬區域的結束而釋放     4.成員變數有初始化值     區域性變數沒有預設初始化值

    匿名物件:沒有名字的物件     new Car();//定義物件的簡寫格式     Car c = new Car();     c.run();     new Car().run();     1.當物件對方法只調用一次的時候,就可以簡化成匿名物件     2.匿名物件可以作為實際引數進行傳遞     show(new Car()); 3.3 封裝:隱藏物件的實現細節,僅對外提供公共訪問方式     好處:         將變化隔離         便於使用         提高重用性         提高安全性     封裝原則:         把不需要對外提供的內容都隱藏起來         把屬性都隱藏,提供公共方法對其訪問     private:         只在本類中允許訪問         只能修飾成員變數

3.4 建構函式:被java虛擬機器識別     特點:         1.函式名與類名相同         2.不用定義返回值型別         3.沒有具體的返回值         4.不能被其它方法呼叫     作用:給物件進行初始化          注意:         預設建構函式的特點         多個建構函式是以過載的形式存在的         建立物件時,建構函式即被呼叫         建立物件都必須通過建構函式初始化         類中如果沒有定義建構函式,那麼該類中會自動定義一個預設建構函式         如果定義了指定的建構函式,那麼類中就沒有預設建構函式         建構函式不加修飾符 如void等         建構函式有return語句,但不建議使用

    一般函式和建構函式的區別:         建構函式:             物件建立時,就會呼叫相對應的建構函式,對物件進行初始化             物件建立時,只被呼叫一次         一般函式:             物件建立後,需要函式功能時才呼叫             物件建立後,可以被呼叫多次。          建構函式的過載:         如Person類。         預設建構函式:Person(){};         過載:Person(String name){} 3.5 this關鍵字     定義:代表當前物件         this是所在函式所屬物件的引用     簡單來說:哪個物件呼叫了this所在的函式,this就代表哪個物件     使用場景:         當成員變數和區域性變數重名。可以用關鍵字this來區分。         this可以用於在建構函式中呼叫其它建構函式,         但this必須在第一行 因為要初始化 3.6 static關鍵字     特點:         1.static是一個修飾符,用於修飾成員。         2.static修飾的成員被所有的物件所共享。         3.static優先於物件存在,因為static的成員隨著類的載入就已經存在         4.static修飾的成員可以直接被類名呼叫 類名.靜態成員         5.static修飾的資料是共享資料,物件中儲存的是特有資料。              成員變數和靜態變數的區別(static修飾的就是靜態變數):         1.兩個變數的生命週期不同。           成員變數隨著物件的建立而存在 隨著物件的被回收而釋放           靜態變數隨著類的載入而存在,隨著類的消失而消失。         2.呼叫方式不同             成員變數只能被物件呼叫。             靜態變數可以被物件呼叫,還可以被類名呼叫(建議)                 3.別名不同             成員變數也成為例項變數             靜態變數成為類變數         4.資料儲存位置不同             成員變數儲存在堆記憶體的物件中.             靜態變數資料儲存在方法區的靜態區,也叫物件的共享資料區              注意事項:         1.靜態方法只能訪問靜態成員 因為靜態函式載入時還沒有物件            非靜態可以訪問靜態又可以訪問非靜態         2.靜態方法中不可以使用this或super關鍵字         3.主函式是靜態的     主函式:         1.格式是固定的             public:因為許可權必須是最大的             static:虛擬機器呼叫時不需要物件,直接用主函式所屬類名呼叫即可。             void:主函式沒有具體的返回值             main:函式名,不是關鍵字,只是一個jvm識別的固定的名字             String args[]:這是主函式的引數列表,是一個數組型別的引數,而且元素都是字串型別的         2.被jvm所識別的          靜態的使用場景:         1.靜態變數:             當分析物件中所具備的成員變數的值都是相同的             若資料在物件中都是不同的,就是物件的特有資料,是非靜態的             如果是相同的資料,不需要修改 可以定義成靜態的         2.靜態函式             判斷該函式功能是否有訪問到物件中的特有資料             即該功能是否需要訪問非靜態的成員變數 如果需要 則是非靜態的。             如果不需要,可以將該功能定義成靜態,也可以定義成非靜態,             但是非靜態要陪物件呼叫,而僅僅建立物件呼叫非靜態的             沒有訪問特有資料的方法,該物件的建立是沒有意義的。

    靜態程式碼塊:隨著類的載入而執行,而且只執行一次         static{             System.out.println("林允兒");         }

        作用:用於給類進行初始化。

    構造程式碼塊(在類中):可以給所有的物件進行初始化         {                      }

    區域性程式碼塊:在方法中,限制變數的生命週期

    執行順序:靜態程式碼塊>構造程式碼塊>區域性程式碼塊

    javadoc:生成文件和api         命令例如:javadoc -d myhelp  -author -version ArrayTool.java         幫助命令:javadoc -help(Javadoc命令的解釋)     注:1.若有一個類的方法都是靜態的,類不需要建立物件          保證其不被建立物件 可以將建構函式私有化          3.7 單例設計模式     設計模式:是一種思想,對問題的解決方式(有23種)     單例:可以保證一個類在記憶體中的物件的唯一性         對於多個程式使用同一個配置資訊物件時,就需要保證該物件的唯一性          保證物件的唯一性         1.不允許其他程式用new建立該類物件         2.在該類中建立一個本類例項         3.對外提供一個方法讓其他程式可以獲取該物件

    步驟:         1.私有化該類建構函式         2.通過new在本類中建立一個本類物件         3.定義一個公有的方法,將建立的物件返回          餓漢式:執行緒安全,         類一載入,物件就已經存在了         開發常用這個         class Single         {             static Single s = new Single();             private Single(){}             public static Single getInstance(){                 return s;             }         }     懶漢式:類載入的時候沒有物件,呼叫getInstance方法時才會建立物件         延遲載入形式         執行緒不安全         class Single         {             static Single s = null;             private Single(){}             public static Single getInstance(){             if(s == null)                 s = new Single();             return s;             }         }