




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第6章 類與對象在日常生活中,在蓋房子之前要首先設計一個建筑圖紙,然后根據圖紙來蓋房子。所謂類,好比在日常生活中描述一個物品的信息,如房子的建筑圖紙。而對象就好比實實在在的房子。本章將要介紹類的定義、類的成員變量的定義和方法的定義、方法的參數等知識。通過本章的學習,讀者應該能夠完成如下幾個目標。了解什么是面向對象。熟悉Java中的類并能夠進行類的操作。掌握Java程序中的方法的創(chuàng)建和使用。6.1 什么是面向對象所謂面向對象,是指編寫程序的時候要圍繞著一個對象的功能進行編寫的。本節(jié)將要介紹面向對象的特點以及與面向過程編程的區(qū)別。6.1.1 面向對象編程的特點面向對象編程的縮寫是OOP,全稱為Ob
2、ject Oriented Programming。在進行面向對象的編程時,方法和成員變量都寫在具體的對象里,并對其成員變量和方法有很好的隱藏性。對象之間的訪問都是通過其接口進行的。下面列舉面向對象編程的特點,分為如下幾種。首先要說的是繼承。所謂繼承,是發(fā)生在類與類之間的,是子類共享父類成員變量和方法的一種模式。通過擴展子類的方法可以使子類有比父類更加強大的功能。說明:繼承是面向對象編程的特點,同樣也是Java的特點,這里和其他語言有很大不同。示例代碼01/bike類描述的是一個自行車02class bike03040506/ racing_cycle類描述的是一個公路賽車,繼承自bike07
3、class racing_cycle extends bike0809 提示:繼承是發(fā)生在類與類之間的。繼承可以是單繼承,也可以多層繼承。多態(tài)是指對象在運行期和編譯期具有兩種狀態(tài),多態(tài)的使用使代碼具有了更多的靈活性和重用性。抽象是指在定義類的時候,確定了該類的一些行為和動作。比如自行車可以移動,但怎么移動不進行說明。這種提前定義一些動作和行為的類為抽象的。封裝是指對一件物品的描述信息是這個物品所特有的,是不能讓外界看到的一些成員變量和方法。在Java里成員變量和方法就被封裝在類里,需要通過一些特有的方法訪問它們。6.1.2 面向對象編程與面向過程編程的區(qū)別面向過程是指在遇到問題的時候,怎么去解
4、決這個問題,而分析問題的步驟,就是解決這個問題的方法,是通過方法一步一步來完成的。面向對象是指在遇到問題的時候,把問題分解成各自獨立功能的類,而這個類是完成各自問題的??偨Y如下所述。面向過程和面向對象最明顯的區(qū)別就是,面向對象是按照要完成的功能來實現的,而面向過程是按照解決這個問題的步驟來實現的。面向對象是按照程序中的功能進行劃分的。面向過程是按照問題的解決思路來劃分的,是一步一步來解決問題的。面向過程更看重的是完成問題的過程。面向對象更看重的是功能,通過各種功能模塊的組合來完成問題。6.2 什么是類所謂類是一種抽象的東西,描述的是一個物品的完整信息。比如房子和圖紙的關系。在Java里,圖紙就
5、是類,定義了房子的各種信息,而房子是類的實體。6.2.1 類的定義和對象的創(chuàng)建定義一個類表示定義了一個功能模塊。下面先介紹如何定義一個類,以及如何創(chuàng)建這個類的實例,即對象。類是通過關鍵字class來定義的,在class關鍵字后面加上類的名稱,這樣就創(chuàng)建了一個類。在類里面可以定義類的成員變量和方法。類的語法代碼如下所示。class 類的名稱/類的成員變量/類的方法創(chuàng)建類的實例是通過new關鍵字來定義的,后面加上定義類時為類起的名稱,需要注意的是在類名后還需要一個括號。創(chuàng)建類的實例的代碼如下所示。new 類的名稱();6.2.2 如何使用現有類在定義一些類的時候,如何使用它們呢?這里需要分為多種情
6、況。定義的類可以在一個包下面,也可以不在一個包下面,這在使用時是不同的。類又分為已有類和自定義類,它們之間的使用也是有區(qū)別的。下面就通過范例來講解在不同情況下如何使用類?!痉独吭谕夸浵率褂妙?。首先是定義一個bike類,在該類中不存在任何成員變量和方法,這里只是演示如何在同一目錄下使用類。示例代碼01/bike.java02class bike0304接下來定義一個使用bike類的類。01/testBike.java02/在testBike類里使用了bike類03class testBike0405bike b = new bike();066.2.3 類設計的技巧設計一個類要明確這個所要完
7、成的功能,類里的成員變量和方法是描述類的功能的。如果定義了和這個類不相關的成員變量和方法將不是一個良好的設計?!痉独渴纠a是一個不太好的類設計。示例代碼01public class bike0203/這個成員變量描述的是自行車的顏色.04String color = 黃色;0506/這個成員變量描述的是公路賽車的顏色,所以在這里不太合適07String racing_color = 綠色;08在本程序中定義了一個表示自行車顏色的color成員變量,又定義了一個表示賽車顏色的racing_color成員變量;而該程序是定義的一個bike自行車類,所以定義表示賽車顏色的racing_color
8、成員變量是不太好的選擇。 【范例6-8】示例代碼6-8是一個良好的類設計。示例代碼6-801public class bike0203/這個成員變量描述的是自行車的顏色04String color = 黃色;0501public class racing0203/這個成員變量描述的是公路賽車的顏色04String racing_color = 綠色;05【代碼解析】在該范例中,定義了兩個類。其中bike類中只定義了一個表示自行車顏色的color成員變量。同樣在racing類中只定義了一個表示賽車顏色的racing_color成員變量。這種設計相對上一個范例中的設計要好得多,這樣使類和成員變量相
9、對應,也使別人更容易讀懂代碼。6.3 成員變量所謂成員變量就是這個類里定義的一些私有的變量.,這些變量是屬于這個類的。就好比日常生活中的自行車的大小,即這個車子是26還是28的,這個尺寸就是自行車的成員變量,是描述這個自行車的。下面開始介紹成員變量。6.3.1 成員變量的創(chuàng)建成員變量描述的是這個類的一些屬性或狀態(tài)的,下面通過代碼來演示怎么定義成員變量。語法為:變量的類型 變量的名稱?!痉独縿?chuàng)建成員變量的一般形式。示例代碼01/bike類描述的是一個自行車02public class bike0304/這個成員變量描述的是自行車的顏色.05String color;0607/這個成員變量描述的
10、是自行車的大小,即尺寸.08String size;09在該程序中,定義了一個叫做bike的類,在該類中定義了兩個成員變量,一個是表示自行車顏色的color成員變量,一個是表示自行車型號的size成員變量。 下面看一個創(chuàng)建成員變量的完整形式。 代碼講解通過new關鍵字來創(chuàng)建這個bike類的對象,用bike類的對象引用b來給其成員變量賦值。因為成員變量是在這個類實例化后才能訪問到的。成員變量賦完值后,調用println語句來打印并顯示結果。 6.3.2 成員變量的初始化通過new關鍵字來創(chuàng)建一個對象后,會有一個系統(tǒng)默認的初始值。所以說不管有沒有在創(chuàng)建成員變量的時候給變量一個值,系統(tǒng)都會有一個默認
11、的值。成員變量和對象的引用在申明的時候不對其賦初值,那么系統(tǒng)都會賦一個初值,具體的信息如表所示。6.4 局部變量局部變量和成員變量很相似都是描述信息的。局部變量和成員變量的不同點就是局部變量是在方法體里創(chuàng)建的,在方法體外是訪問不到這個變量的。6.4.1 局部變量的創(chuàng)建和初始化局部變量描述的是方法體的一些屬性或狀態(tài)的,下面通過代碼來演示怎么定義局部變量。創(chuàng)建局部變量的基本語法為:變量的類型 變量的名稱?!痉独垦菔揪植孔兞康睦?。示例代碼01/test類描述的是基本類型的初始化02public class test40304/程序的運行函數即主入口函數05public static void m
12、ain(String args)0607/基本類型的局部變量08int size = 123;09boolean b = true;10/打印并顯示局部變量11System.out.println(size);12System.out.println(b);1314 6.4.2 局部變量和成員變量的區(qū)別局部變量描述的是這個方法體內的屬性的,而成員變量描述的是這個對象里的屬性的,它們之間的區(qū)別,即訪問區(qū)別如下:成員變量可以被public、protected、default、private、static、final修飾符修飾。局部變量可以被final修飾符修飾,但不能修飾為public、prote
13、cted、default、private、static。成員變量是在堆里進行創(chuàng)建的,而局部變量是在棧里進行創(chuàng)建的。成員變量是系統(tǒng)默認值。局部變量沒有系統(tǒng)默認值,必須手動賦值。6.5 方法每個人都有走、吃和睡等動作。在Java中,所謂方法就好比日常生活中的一個動作,是完成一系列操作的。在Java中也是如此,方法收到對象的信息,進行處理的操作。6.5.1 方法的創(chuàng)建和參數方法的參數是提供外界在執(zhí)行方法的時候提供給方法的特殊描述信息的,好比日常生活中的,用力砸東西,用大力砸東西。而這個用大力就是提供給這個進行特殊描述的。創(chuàng)建方法的語法為:方法修飾符 方法的返回類型 方法名稱(方法參數)方法體方法的定
14、義如下所示。public void add(int i, int n)System.out.println(i+n);代碼說明: 方法名稱為add,有兩個參數都是int類型的。 方法體是打印i+n的值,并顯示出來。方法的修飾符為public類型的,修飾符可有可無。 方法的返回類型有很多種,主要分為如下幾類。方法返回值為void類型時為無返回值。方法返回值還可以為任意的類型,如String、Boolean、int。如果定義了方法的返回類型就必須在方法體內用return把返回值進行返回。方法的返回值可以為null,但必須是對象類型?;绢愋筒荒芊祷豱ull。在返回值為基本類型的時候,只要能夠自動轉
15、換就可返回。方法的參數也有多種形式,下面是對方法參數的討論。方法的參數可以為基本數據類型,也可以為對象引用類型。每個參數都有完整的聲明該變量的形式。方法的參數可以有一個,也可有多個。Java程序的入口main就為一個方法,參數為String args,它是個特殊的方法。6.5.2 方法參數的傳遞參數的傳遞是傳遞的值還是引用呢。下面通過例子來分別說明,請仔細考慮?!痉独慨攤鬟f類型為基本類型時,傳遞的是該類型的值。01/test類描述的是基本類型的傳遞02public class test0304/方法add是把傳入的參數進行+1,并顯示其結果05public void add(int i)06
16、07i = i + 1;08System.out.println(i);091011/程序的運行方法,即主入口方法12public static void main(String args)1314/基本類型的局部變量15int size = 44;1617/創(chuàng)建bike類的對象實例,即bike類的對象引用b18test t = new test();1920/打印原來的值21System.out.println(size);22/運行時的值23t.add(size);24/打印運行后的值25System.out.println(size);2627在參數為基本類型進行傳遞的時候,是傳遞的這個
17、值的備份,即第二份。不論在方法中怎么改變這個備份,都不是操作原來的數據,所以原來的值是不會改變的。 當傳遞的參數為對象引用類型時,也是利用的傳值的方式進行的。 01/test類描述的是方法的傳遞02public class test0304public static void main(String args)0506/創(chuàng)建一個對象類型07String s = new String(Hello );0809/打印其值10System.out.println(before : + s);1112/通過方法去改變其值13changeString(s);1415/打印方法改變的值和原值16Syste
18、m.out.println(changeString : + s);17System.out.println(after : + s);1820public static void changeString(String str)2122str = new String(hi); 23str = str + china!;2425當把對象引用s傳遞到一個方法后,這個方法可以改變這個對象的屬性,并能返回相應的改變。但這個對象引用指向的這個字符串s是永遠不會改變的。這里傳遞對象引用后,又通過這個引用去創(chuàng)建了一個新的String類型的字符串,這兩個字符串在內存中當然不是同一個了。 6.6 對象引用的
19、使用所謂對象引用就是該引用名稱指向內存中的一個對象,通過調用該引用即可完成對該對象的操作。本節(jié)將要討論一些操作對象引用中將出現的一些常見問題。如不存在的對象、空引用、對象間的比較等問題,下面分別來說明。6.6.1 調用不存在的對象或成員變量如果調用的對象或成員變量沒有創(chuàng)建,那么在編譯的時候編譯器將出現錯誤。下面用代碼演示這個錯誤,并演示如何修正。【范例】代碼演示訪問不存在的成員變量。示例代碼01/test類描述的是測試訪問不存在的成員變量02public class test0304/main方法為程序的入口函數05public static void main(String args)060
20、7/創(chuàng)建test類的對象實例08test t = new test();09/t.a訪問的是一個不存在的成員變量,將提示不可識別的字段。10System.out.println(t.a);1112 運行將會發(fā)生如下異常。Exception in thread main java.lang.Error: Unresolved compilation problem: t.a cannot be resolved or is not a fieldat test.main(test.java:7)【代碼解析】對象引用t要訪問的是a這個成員變量,而a沒有聲明,在編譯的時候將提示錯誤信息。在錯誤提示里
21、,已經提示為main方法里的第7行,只需查看這里就能找到錯誤的所在。修改上述代碼使程序運行通過。 01/test類描述的是測試訪問不存在的成員變量02public class test0304/a為test類的成員變量05String a;0607/main方法為程序的入口方法08public static void main(String args)0910/創(chuàng)建test類的對象實例11test t = new test();12/t.a訪問的是一個不存在的成員變量,將提示不可識別的字段13System.out.println(t.a);1415根據上例中的錯誤提示在test類聲明了一個名稱
22、為a的成員變量。因為String類型的a沒有進行賦值,所以打印出來為null。 6.6.2 調用對象為null值的引用任何操作的對象的值為null的時候都將出現空指針錯誤,即“NullPointException“錯誤,因為成員變量和方法是屬于對象的,即屬于用new關鍵字創(chuàng)建出來的對象的。下面用代碼來演示這個錯誤,并演示如何進行修正。01/ArrayList類所需要的02import java.util.ArrayList;0304/test類測試訪問null值的對象05public class test0607/聲明一個成員變量a并進行初值08public String a = test類的
23、成員變量;10/Java程序的主入口方法11public static void main(String args)1213/創(chuàng)建test類的對象實例14test t = new test();1516/創(chuàng)建一個集合類,對象引用為一個null值17ArrayList al = null;1819/向一個null的集合對象里添加數據20al.add(t.a);2122ArrayList類為一個集合類和數組很相似,都是用來存儲數據用的。錯誤提示在main方法里的20行,提示為NullPointerException,即空指針錯誤。對象引用al聲明為一個null值,表示這個對象并沒有創(chuàng)建其對象的實例,只是一個引用而已。當操作任意一個為null的對象的時候都將提示空指針錯誤。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 證劵交易平臺使用手冊
- 農藥與肥料使用指導作業(yè)指導書
- 保育師初級練習測試卷
- 母嬰護理員初級練習測試題附答案
- 倉庫管理工作計劃模板
- 工作效率提升方案報告
- 地理人教版2024版七年級初一上冊1.1宇宙中的地球教案02
- 技術方案選型表-技術方案選擇
- 新一代辦公軟件使用手冊
- 調研報告之行業(yè)市場現狀分析
- 廚房設備購銷合同范本(一)與廚房設備采購合同8篇
- 2025年中儲糧吉林分公司招聘(74人)筆試參考題庫附帶答案詳解
- 中國保險行業(yè)協(xié)會官方-2023年度商業(yè)健康保險經營數據分析報告-2024年3月
- 表現圖技法試題
- 工會換屆選舉工作課件
- (課件)急性胸痛的鑒別診斷
- Audio-Jack-連接器設計經驗課件
- 裝修巡查表范本
- 北京市水利工程維修養(yǎng)護定額
- 最新固體制空調凈化系統(tǒng)設計確認方案
- 《品牌策劃與管理(第4版)》知識點與關鍵詞解釋
評論
0/150
提交評論