1. 程式人生 > >JAVA面向物件(一)

JAVA面向物件(一)

Java 面向物件程式設計 闡述(一)

1、面向物件程式設計

面向物件程式設計(Object Oriented Programming,OOP)是將現實生活中的概念通過程式進行模擬,其中有兩個最重要的概念:物件、類

物件具有屬性和行為

物件是指某個具體事物,而同一類事物有其共性,屬性和行為就是其共性

對這些共性進行歸納,就形成了類,這個過程我們稱為抽象

2、類、物件與面向物件程式設計

l 以前的程式設計方式是面向過程,每個具體的功能都需要我們去進行具體的實現

面向物件的思路則不同,我們需要完成某個功能,只需要向物件傳送一個“命令”,而具體怎麼完成功能,是由該物件所屬的類去定義的

3、類的定義

l 類是一個模板,用於建立同一型別的物件

l 面向物件程式設計的基本元素是類,類確定了物件的形式和行為

4、類的宣告1

Java中定義一個類使用關鍵字class ,一個合法的識別符號和一對錶示程式體的大括號

l <classname>代表類的名稱,類名是一個名詞,採用大小寫混合的方式,每個單詞的首字母大寫。

l <body of the class>包含屬性和方法的宣告

5、類的宣告2

l 理解類的最重要的事情就是它定義了一種新的資料型別

類一旦定義後,就可以用這種新型別來建立該型別的物件。這樣,類就是物件的模板(template),而物件就是類的一個例項(instance)。

l “類”不具備做事的功能:事情由類來定義,但事情是由物件來做的。類是虛擬的,物件才是實實在在的,但物件是由類這個模板產生的

6、類的屬性

l “人類”具有了姓名、年齡、性別、地址等屬性,對於一個人來說,一旦被創造出來,就具有了這些特徵

7、類的行為

l “行為”是完成某個具體的動作,用方法來表示行為

8、類的層次結構

l 類中定義屬性與方法,表明了由這個類產生的物件所具有的特徵與可以進行的操作

9、物件

l 注意,到此為止,雖然類已經比較完善了,但自始至終並未真正產生一個能做事的物件來,我們只是把所有人的公共特點、行為通過類的形式歸納抽象了出來,那我們到底該怎麼使用這個類呢?該如何通過這個類,產生一個具有姓名、年齡等屬性,可以吃飯、跑步的物件來呢?

10、物件的建立

l 類的宣告是對某一類事物的描述,是一種抽象,要想使用類,需要生成該類的物件

就好比我們要使用電腦,不可能使用設計圖紙幫我們工作,而是需要某一臺真正的電腦。設計圖紙就是類,而大家使用的電腦則是該“類”電腦的一個物件。所以學完了類的宣告,我們來學習如何建立類的物件。

11、使用關鍵字new建立物件

建立物件可以使用關鍵字new,語法如下

生成一個“人類”物件就好比一個新baby的降生,第一句程式碼實際上只是表示“我們要生一個baby,名字已經起好了,叫p”,第二句才是真正的baby降生(記憶體分配)

12、使用關鍵字new建立物件2

要是這個baby正在出生的時候起名字呢?我們通常會採取下面這種宣告方式:

和定義簡單型別的變數是類似的,只不過需要new關鍵字來產生物件,而簡單資料型別可以直接賦值

13、通過物件訪問屬性和行為

通過.”來呼叫物件的屬性和行為

14、增加一個自我介紹的方法

上例中屬性和方法都是在main方法內才被呼叫的,其實,我們可以更靈活一點

15、屬性的預設值

在定義類的屬性後,使用的過程中,如果沒有給這些屬性賦值,那麼JVM系統將自動為這些屬性賦預設值

數值型別的初始值為0,對於char型別,其值為“\u0000”,顯示為空字元,boolean型別的初始值為false,而引用型別(如String)的初始值為null

l 雖然說每一個類的屬性均會有預設值,但是為了避免錯誤,我們應當在使用這些屬性之前,對每一個屬性進行手工賦值

16、構造方法1

l Person是型別、p是物件名、new分配記憶體

那麼 Person()是什麼?

l 我們沒有定義過這個方法

l 該方法名和類名相同

17、構造方法

其實,“Person()”方法叫做構造方法,構造方法其實就是生產物件的方法、方式

“new Person()”的意思是,通過“Person()”這個構造方法所指定的方式來生產一個人類物件

l “Person()”構造方法由系統自動生成,所以我們才得以使用

l 既然是方法,那麼當然可以接受引數

l 無引數的構造方法

l 有引數的構造方法

18、無引數的構造方法1

l 對於一個類,如果我們不自定義構造方法,那麼程式會自動構建無引數構造方法

19、無引數的構造方法2

l 構造方法的名稱與類名一樣,且構造方法沒有返回值

l 當類中已經建立了構造方法時,編譯器就不再為類自動建立構造方法

l 編譯器自動建立的構造方法為空方法,當然,我們自定義構造方法時,可以更加靈活的運用

20、無引數的構造方法3

但是這也存在一個問題,即每次我們建立物件時,初始化程式碼總是重複執行一樣的內容,例如上例,每次建立的Dog物件,名字均為“旺財”

l 有沒有辦法能夠實現在建立物件的同時,自由指定屬性的值呢?答案是肯定的,這需要我們更進一步,來看看帶引數的構造方法。

21、帶引數的構造方法1

l 帶引數的方法可以更靈活的讓我們給屬性賦值

22、帶引數的構造方法2

l 在類中已經聲明瞭一個帶引數構造方法的情況下,編譯器還會不會自動生成無引數的預設構造方法呢

l 需要手工加上無引數構造方法的宣告

24、方法過載

l 一個類中可以有多個方法,方法名相同,引數列表不同,這叫做方法的過載。

l 事實上,過載的方法由於其引數列表的不同,根本上就是不同的方法

25、this關鍵字

l 這麼寫正確嗎?

l this 關鍵字的含義:可以為呼叫了其方法的那個物件生成相應的控制代碼。也就是說,哪個物件呼叫了方法,那麼這個方法內的this指的就是哪個物件

26、static關鍵字

如果一個成員被宣告為static,它就能夠在它的類的任何物件建立之前被訪問,而不必引用任何物件

l static成員的最常見的例子是main(),因為在程式開始執行時必須呼叫main(),所以它被宣告為static

宣告為static的方法有以下幾條限制:

它們僅能呼叫其他的static方法。

它們只能訪問static資料。

l ·它們不能以任何方式引用this或super