一、面向對象
- 面向對象的特徵:
1)封裝:是類的一個重要的特徵,它將數據和行爲都打包寫在同一個類中,在對於使用這個類的其他程序來說,會隱藏自己的具體實現方式。
2)繼承:在創建新的類的時候,使用現有的類作爲模板,進行功能的擴充和改進。
3)多態:可以將函數的形參定義爲一個父類類型,而在真正調用該父類類型的所有子類對象都可以傳入,根據傳入子類對象不同,函數可以運行多種形態。 - 面向對象的優點:
1)封裝性好
2)易於維護
3)易於擴展
4)代碼質量好
二、類
-
定義類
[類修飾符] class 類名稱{ //成員變量 [修飾符] 數據類型 成員變量名稱; //成員方法 [修飾符] 返回值的數據類型 方法名(參數1, 參數2,······, 參數n){ 語句塊; } }
-
類修飾符
修飾符 含義 public
公共類聲明,可以被任何對象訪問 abstract
抽象類,沒有實現方法,需要子類提供方法的實現,所以不能夠創建該類的實例 final
最終類聲明,即非繼承類,不能夠被其他的類繼承 缺省
缺省修飾符時,則表示只有在相同包中的對象才能使用這樣的類 一個類其實可以擁有多個修飾符,且並沒有先後順序之分,但是
abstract
和final
相互對立,所以不可以同時應用在一個類的定義。 -
成員變量
一個成員變量描述了類的內部信息,成員變量可以是基本類型變量,也可以是對象、數組等其他引用型數據。
其定義格式如下:[修飾符] 變量類型 變量名 [= 初值];
成員變量修飾符:
修飾符 含義 public
公共訪問控制符,可以被任何對象方法訪問 private
私有訪問控制符,指定變量只允許自己類的方法訪問,其他任何類(包括子類)中的方法均不能訪問此變量 protected
保護訪問控制符,指定該變量只可以被它自己的類及其子類或同一包中的其他類訪問,在子類中可以覆蓋此變量 缺省
缺省訪問控制符,同一個包其他類可以訪問此成員變量,但是其他包中的類不可以訪問該成員變量 final
最終修飾符,指定此變量的值不能改變 static
靜態修飾符,指定該變量被所有對象共享,即所有的實例都可以使用該變量 transient
過度修飾符,指定該變量是一個系統保留,暫無特別作用的臨時性變量 volatile
易失修飾符,指定該變量可以同時被幾個線程控制和修改 除了訪問控制修飾符有多個以外,其他的修飾符都只有一個,一個成員變量可以被兩個以上的修飾符同時修飾,但是有些修飾符不能同時定義的。
-
成員方法
類的方法是用來定義類的成員變量進行操作的,是實現類內部功能的機制,同時也是類與外界進行交互的重要窗口。[修飾符] 返回值數據類型 方法名(參數1, 參數2, ..., 參數n){ 語句塊 return [表達式]; }
成員方法修飾符:
修飾符 含義 public
公共訪問控制符,可以被任何對象方法訪問 private
私有訪問控制符,指定變量只允許自己類的方法訪問,其他任何類(包括子類)中的方法均不能訪問此方法 protected
保護訪問控制符,指定該方法只可以被它自己的類及其子類或同一包中的其他類訪問,在子類中可以覆蓋此方法 缺省
缺省訪問控制符,同一個包其他類可以訪問此成員方法,但是其他包中的類不可以訪問該成員方法 final
最終修飾符,指定此方法不能被覆蓋 static
靜態修飾符,指定不需要實例化一個對象就可以調用的方法 abstract
抽象修飾符,指定該方法只聲明,未實現,需要在子類中被實現 synchronized
同步修飾符,在多線程程序中,該修飾符用於對同步資源加鎖,防止其他線程訪問,運行結束後解鎖 native
本地修飾符,指定此方法的方法體使用其他語言在程序外部編寫的 成員方法與成員變量一樣,都可以有多個修飾符,都可以使用兩個及以上的修飾符來進行修飾,但是,有些修飾符之間是互斥的,不能夠同時修飾。
-
成員變量和局部變量的區別
類中定義的變量是成員變量,但是方法中定義的變量是局部變量。– 成員變量是屬於類的,但是局部變量是在方法中定義的變量,或者是方法中的參數,成員變量可以被
public
,private
,static
等修飾符所修飾,但是局部變量則不能夠被控制修飾符和static
所修飾。但是成員變量和局部變量都可以被final
修飾。
– 從存儲方式上看,成員變量是對象的一部分,而對象是存在堆內存上的,但是局部變量是存在棧內存上的。
– 生存時間,成員變量是屬於對象的,從對象被創建而存在,直到對象被銷燬的時候,才被銷燬。局部變量則是方法被調用的時候開始產生,而方法結束調用的時候,局部變量被銷燬。
– 初賦值,成員變量如果沒有被初賦值的話,則會自動以類型的默認值賦初值(除被final
但並未被static
修飾的成員變量必須顯式賦值),但是局部變量不會自動賦值,必須顯示賦值後才能被使用。
三、對象的創建與使用
-
創建對象
對象是類的實例
創建對象:
a.聲明指向“由類所創建的對象”的變量。
b.利用new運算符創建新的對象,並且讓前面創建的對象指向這個新對象。Person man = new Person();//創建對象
此時,man這個指向對象的變量是儲存在棧內存中,但是後面對象即
new Person()
是存儲在堆內存上的, -
對象的使用
當我們創建了對象之後,就可以對對象進行一系列操作了,利用點運算符對對象成員進行訪問。
例如:對象名.對象成員
例如:
public class demo{ private int height;//成員變量 public void setHeight(int height){//成員方法 this.height = height; } public int getHeight(){//成員方法 return this.height; } public static void main(String[] args) { demo example = new demo();//創建對象example example.setHeight(12);//調用對象成員 System.out.println(example.getHeight());//調用對象成員,並且輸出對象成員 } }
-
匿名對象
當一個對象被創建之後,在調用該對象的方法的時候,可以不去定義對象的引用變量,而直接調用這個對象的方法,這樣子的對象被稱爲匿名對象。public class demo{ public demo print(){ System.out.println("你真帥!!!"); return null; } public static void main(String[] args) { new demo().print();//並未定義對象的引用變量,而是直接調用該方法,這樣子的對象稱爲匿名對象,該方法執行之後,就會成爲垃圾。 } }
使用匿名對象有兩種情況:
a.如果對一個對象只需要進行一次方法調用,那麼就可以使用匿名對象。
b.將匿名對象作爲實參傳遞給一個方法調用,