Java面向對象(一) 一、面向過程(POP)與面向對象(OOP) 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎麼做。面向對象,將功能封裝進對 象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做。 面向對象的三大特征: 封裝 繼承 多 ...
Java面向對象(一)
目錄一、面向過程(POP)與面向對象(OOP)
-
二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎麼做。面向對象,將功能封裝進對 象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做。
-
面向對象的三大特征:
- 封裝
- 繼承
- 多態
- (抽象)
-
例子:把大象裝進冰箱
- Java語言就是一門面向對象的語言。
二、類和對象
-
類和對象是 Java 語言兩個基本元素。
類:對一類事物的描述,是抽象的、概念上的定義。
對象:實際存在的該類事物的每個個體,因而也稱為實例(instance)。
例如:人是一個類,而每個特定的人就是一個對象。
-
面向對象程式設計的重點是類的設計 。
類的設計,其實就是類的成員的設計。
2.1 類及類的成員
-
類的成員:
- 屬性 = 成員變數,
- (成員)方法 = 函數
- 構造器
- 代碼塊
- 內部類
例如:
註意:一個類中不一定要包含所有的類的成員。
2.2 對象的創建與使用
- 如何使用我們寫好的 Java 類及類的成員?
將 Java 類實例化,即創建對象來調用。
-
創建對象語法: 類名 對象名 = new 類名();
-
使用“對象名.對象成員”的方式訪問對象成員(包括屬性和方法)
public class People { String name; int age; public void eat(){ System.out.println(“Eating.”); } public viod move(){ System.out.println(“Move.”); } }
public class Text{
public static void main(String args[]){
//創建對象
People p1 = new People();
p1.age = 20;//訪問屬性
System.out.println(p1.age);
p1.eat();//訪問方法
p1.move();//訪問方法
People p2 = new People();
People p3 = p1;
}
}
註:每創建一個類的對象,則每個對象都獨立擁有一套類的屬性(非static的)。例如上面代碼中,p1和 p2對象都獨立擁有一套類的屬性,但是應為 p3對象是賦予了 p1對象的地址,所以它跟p1 指向堆空間中的同一個對象實體。
2.3 類的訪問機制
在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變數。(例外:static方法訪問非static,編譯不通過。)
在不同類中的訪問機制:先創建要訪問類的對象,再用對象訪問類中定義的成員。
2.4 Java記憶體解析
特別的:數組對象的記憶體解析:
2.5 匿名對象
-
概念:創建的對象沒有顯式的賦給一個變數名,即為匿名對象。
-
創建:new 類名().方法名()
-
特征:只能調用一次。(每 new 一次就相當於創建一個新的對象)
-
使用:
-
如果對一個對象只需要進行一次方法調用,那麼就可以使用匿名對象。
-
經常將匿名對象作為實參傳遞給一個方法調用。
public class InstanceTest { public static void main(String[] args) { // 匿名對象的創建 new Phone().sendEmail(); new Phone().playGame(); // 每 new 一次就相當於新創建一個對象 new Phone().price = 1999; new Phone().showPrice();//0.0 // 匿名對象做實參 PhoneMall mall = new PhoneMall(); mall.show(new Phone()); } } class PhoneMall{ public void show(Phone phone){ phone.sendEmail(); phone.playGame(); } } class Phone{ double price;//價格 public void sendEmail(){ System.out.println("發送郵件"); } public void playGame(){ System.out.println("玩游戲"); } public void showPrice(){ System.out.println("手機價格為:" + price); } }
-
三、類的成員之一:屬性(也叫成員變數)
語法格式: 修飾符 數據類型 屬性名 = 初始化值 ;
-
常用的許可權修飾符有:private、預設(default)、protected、public
其他修飾符:static、final (暫不考慮)
-
數據類型:任何基本數據類型 或 任何引用數據類型。
-
屬性名:屬於標識符,符合命名規則和規範即可。
變數的分類:成員變數與局部變數
-
成員變數:在方法體外,類體內聲明的變數。
-
局部變數:在方法體內部聲明的變數。
-
註意:二者在初始化值方面的異同:
同:都有生命周期
異:局部變數除形參外,均需顯式初始化。
例子:
對象屬性的預設初始化賦值:
四、類的成員之二:方法
4.1 方法的聲明格式:
修飾符 返回值類型 方法名(參數類型 形參1, 參數類型 形參2, ….){
方法體程式代碼
return 返回值;
}
其中:
1.修飾符:public,預設,private, protected等
2.返回值類型:
(1) 沒有返回值:void。
(2) 有返回值,聲明出返回值的類型。與方法體中“return 返回值”搭配使用
3.方法名:屬於標識符,命名時遵循標識符命名規則和規範,“見名知意”
4.形參列表:可以包含零個,一個或多個參數。多個參數時,中間用“,”隔開
5.返回值:方法在執行完畢後返還給調用它的程式的數據。
4.2 方法的調用:
方法通過方法名被調用,且只有被調用才會執行。
4.3 註意:
-
方法被調用一次,就會執行一次。
-
沒有具體返回值的情況,返回值類型用關鍵字void表示,那麼方法體中可以不必使用return語句。如果使用,僅用來結束方法。
-
定義方法時,方法的結果應該返回給調用者,交由調用者處理。
-
方法中只能調用方法或屬性,不可以在方法內部定義方法。