程式導向 procedure oriented programming (POP):分析出解決問題所需要的步驟,然後把步驟一步一步實現。因此更注重步驟。
物件導向 object oriented programming (OOP):以分類的的方式進行思考和解決問題。物件導向的思維方式適合於處理複雜問題。物件導向的思想符合人類的認識習慣。因此,更注重宏觀、整體上的設計。
/*大象進冰箱問題
程式導向:開啟冰箱門();
裝大象();
關閉冰箱門();
程式導向:設計冰箱類{
開門();
關門();
}
人類{
操作();
}
或
門類{
開門();
關門();
}
設計冰箱類{
門類();
}
人類{
操作();
}
*/
注:程式導向適合處理簡單的事情,直接關注流程,簡單有效。
物件導向適合處理複雜的事情,先使用物件導向的方式對整體關係做出分類,然後,根據不同的類深入細節的處理。
物件導向無法取代程式導向,它們是相輔相成的。物件導向關注於從宏觀上把握事情之間的關係,在具體到如何實現某個細節時,仍然採用程式導向的思維。
什麼是類?
類是一個模板,他描述一類物件(事物)的屬性和行為。
類是表示一個客觀世界某類群體的一些基本特徵抽象。
類 = 汽車設計圖;物件 = 實實在在的汽車。
類裡面定義事物特徵 == 汽車設計圖 == Java.檔案
物件是具體存在 == 具體的是某一輛車(實際存在,可以使用)
類的結構:
成員變數:物件屬性的描述
方法:物件的行為;(可以做的事情)
構造方法:用於建立物件
內部類:即在類體中宣告的類
塊:程式碼塊
類的定義:
第一步:發現類;
第二步:發現類的公共屬性;
第三步:發現類的方法
類的宣告:
[存取許可權修飾符 public/default][修飾符 final/abstract] class 類名{
//類的屬性 類的成員 變數 被類包含
//成員變數宣告語法:
//[存取許可權修飾符][修飾符]資料型別 變數名[=值];
//類的行為 類的成員 方法 被類包含
//成員方法宣告語法:
//[存取許可權修飾符][修飾符] 返回值型別 方法名(形式引數型別 引數名){
//[return 值 ;]
//返回值型別若是void,則return可有可無。其餘的返回值型別必須加上return。
}
}
物件:物件是類的一個範例(物件不是找個女朋友或男朋友),是以類為模板,在記憶體中建立一個實實在在存在的範例。
Car c = new Car();
new關鍵字 + 預設構造方法();在記憶體中建立一個物件,但不能使用,需要在左側以類為模板宣告一個變數指向記憶體空間中具體的物件,使用變數存取物件中的屬性、方法。
注:通過類可以建立無數個物件。
①類是一類事物的抽象概念,是一個模型。
②物件是由這個模型所創造的一個一個的具體存在的,是實實在在的範例。
所以建立物件的過程也叫範例化物件。 物件 == 範例
現實生活中先有類後有類,而程式設計時先設計類後建立物件。
成員變數:
①定義在類中,方法體之外。
②資料型別為基本型別和參照型別。
③變數可以不賦值,Java自動賦值。
④在建立物件時會從類體中複製一份到物件中。
參照型別(String):null, 整數型別:0,浮點型別:0.0,布林型別(boolean):false, 字元型(char):不顯示,實際上為空格。
區域性變數:
①在方法、構造方法、語句塊中定義的變數。
②資料型別為基本型別和參照型別。
③在使用前必須賦初值。
④變數宣告、初始化都在方法中,方法結束後,變數自動銷燬。
⑤方法的引數也是區域性變數,在呼叫時,會為其賦值。
類變數:(也叫靜態變數)類變數也宣告在類中,方法體之外,但必須宣告為static型別。
一個類可以包含以下型別方法:
成員方法:成員方法是定義在類中。這種方法在建立物件時建立。
語法格式:
[修飾符]返回值型別 方法名(參數列){
方法體語句;
[return 返回值;]
//當返回值型別為void時,return可有可無
}
構造方法:
①是定義在Java中的一個用來建立物件的方法。
②方法名與類名相同,沒有返回值,不需要void修飾。
③一個類中可以擁有多個構造方法。(方法過載)
④如果類中沒有顯示的宣告構造方法,類中會預設有一個無參的構造方法。
⑤一旦類中定義了有參的,預設無參的構造方法會被覆蓋。建議寫有參的時候把無參的也寫上。
[存取許可權修飾符] 類名(參數列){
方法體語句;
}
類方法:(也叫靜態方法)類方法也宣告在類中,但必須宣告為static型別。
方法的過載:
什麼樣的情況構成方法過載:在一個類中有多個方法名相同,且引數不同的方法。
引數不同:型別不同,個數不同,順序不同。
過載的作用:可以處理功能相同,但是引數型別不同的一類問題。
注:成員方法和構造方法都可以過載。
若有錯誤,歡迎私信指正。