




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、類與對象的基本概念,類與對象 對象初始化 方法的使用 類的組織 訪問控制 常用工具類 小結(jié),類與對象,什么是對象 對象是現(xiàn)實世界中存在的事物,“萬事萬物皆對象”。 每個對象是構(gòu)成現(xiàn)實世界的一個獨(dú)立的單位,具有自己的靜態(tài)特征(狀態(tài))和動態(tài)特征(行為)。 程序中對象就是一組變量和相關(guān)方法的集合,其中變量表明對象的狀態(tài),方法表明對象所具有的行為。 例如,人(Person)、顧客(Customer)、銀行帳號(Bank account)、鐘表(Clock)及生日(BirthDate)都可以看成是現(xiàn)實生活中的對象,他們具有的狀態(tài)及行為如表3-1所示。,類與對象,現(xiàn)實世界中的對象程序中的類 我們稱現(xiàn)實世界
2、中具有相同靜態(tài)特征和動態(tài)特征的所有對象為“一類對象”,對某類對象進(jìn)行抽象可以形成類(class)。 在抽象的過程中我們會在該類對象的所有靜態(tài)特征和動態(tài)特征中進(jìn)行取舍,只抽取對我們“有用的”特征并在Java的類中加以描述。 class Person String name; int age; char gender; void eat( ) void sleep ( ) ,類與對象,什么是類 可以將現(xiàn)實生活中的對象經(jīng)過抽象,映射為程序中的對象。對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。 類是具有相同數(shù)據(jù)格式(屬性)和相同操作功能(方法)的對象的集合與抽象。
3、 Java程序中類的聲明語法形式如下: 修飾符 class 類名 變量成員聲明及初始化; 方法聲明及方法體; 其中,“ ”內(nèi)的內(nèi)容為可選項。,類與對象,程序中的類程序中的對象 程序中的類是對現(xiàn)實世界中一類對象的描述,也是構(gòu)造程序中對象的模板,對象是類的具體實例。 程序中的類就如同建造大樓的設(shè)計圖紙,程序中的對象(實例)就如同建造出的大樓。使用同一個設(shè)計圖紙可以建造出很多大樓。 例:Student2. java,類與對象,類與對象,程序中的類程序中的對象 生成一個對象: 類名 實例名 = new 類名 (參數(shù)列表); 并在內(nèi)存中為此對象分配內(nèi)存空間, 并返回對象的引用( reference ,相
4、當(dāng)于對象的存儲地址)。,類與對象,程序中引用(reference) 每個引用占據(jù)32位的內(nèi)存空間,其值指向?qū)ο髮嶋H所在的內(nèi)存中的位置,例如: Date d = new Date( ); 產(chǎn)生一個Date類型的對象(實例),d的值就指向該對象實際所在的內(nèi)存空間。,類與對象,類與對象,為什么要使用類? 采用簡單數(shù)據(jù)類型表示現(xiàn)實世界中概念的局存在很大的限性。 例如:采用int型數(shù)據(jù)表示一個日期概念,需要使用3個變量: int day, month, year; 如果要表示2個人的生日,就要使用6個變量; 并且在使用中必須時刻注意三者的聯(lián)系和約束關(guān)系; 同時在使用日期概念時要同時對三個變量進(jìn)行訪問。
5、使用類可以把現(xiàn)實問題中的對象映射為程序中的一個整體類,類與對象,學(xué)生類(Student)類 class Student / 類首部 int id; /定義學(xué)號 String name; /定義姓名 double grade; /定義成績 int age; /定義年齡 / 類定義結(jié)束 產(chǎn)生學(xué)生對象 Student stu1 = new Student( ); Student stu2 = new Student( ); 例:Student1. java,類與對象,類的成員變量聲明的格式如下: 修飾符 類型 變量 = 初始值; 說明: 修飾符如public、private 為訪問控制符。publi
6、c即公有的,也就是它可以被其他任何對象訪問。private即私有的,只能被這個類本身訪問,在類外不可見。 修飾符static指明這是一個類變量(靜態(tài)成員變量或靜態(tài)變量)。 例: Student1. java、StudentTest1. java,類與對象,在一些情況中程序采用的是直接訪問Student類對象成員變量的策略。代碼片段如下: s2.grade = 90; s2.age = 23; 從表面上看,程序一切正常。如果有下面的代碼片段,很快就會發(fā)現(xiàn)這不是一種好的設(shè)計方法。 s2.grade = -50; / 分?jǐn)?shù)為負(fù)? s2.age = -5; / 年齡為負(fù)? 顯然,學(xué)生成績和年齡為負(fù)數(shù)是
7、不符常理的。由于用戶能直接訪問對象的數(shù)據(jù),所以無法限制其它應(yīng)用程序在調(diào)用這些變量時,賦予其數(shù)值的范圍。,類與對象,好的編程習(xí)慣一般不允許其它類直接存取或修改一個對象的成員變量。作為一條規(guī)則,把成員變量聲明成private,把它們對其他對象隱藏起來,通過提供方法訪問屬性值。 語法格式如下: 修飾符 返回類型 方法名(參數(shù)列表) 方法體 例: Student2. java 、StudentTest2. java,封裝把對象的所有組成部分組合在一起,類與對象,方法的調(diào)用 必須注意方法的返回值 public String getName():表示該方法運(yùn)行結(jié)束后會產(chǎn)生一個String類型的對象作為結(jié)果
8、返回給調(diào)用者使用。 public void printName():表示該方法運(yùn)行結(jié)束后沒有任何數(shù)據(jù)供調(diào)用者使用。 方法的參數(shù)列表 public void setName(String stuName) 表示該方法運(yùn)行時必須要接受一個String類型的數(shù)據(jù)。,類與對象,練習(xí) 充實前面的Student類,加入性別、專業(yè)、年級、班級等屬性,并定義相應(yīng)的get、set方法;然后定義測試類對各個屬性進(jìn)行賦值、顯示等測試。,對象初始化,前面的例子,每創(chuàng)建一個Student對象都要調(diào)用一系列set方法來初始化類中的實例變量,這實在太繁瑣。因此,在創(chuàng)建對象的同時就對對象進(jìn)行初始化是一種簡單而有效的解決方法。
9、 Java中有一種特殊的方法叫構(gòu)造方法(Constructor),即產(chǎn)生對象時需要調(diào)用的方法。 構(gòu)造方法的形式如下: public 類名(參數(shù)列表) 語句體 ,對象初始化,說明: (1). 構(gòu)造方法名必須為該類名; (2). 可以通過參數(shù)表和方法體來給你生成的對象的成員變量賦初值; (3). 構(gòu)造方法沒有任何返回值。 例: Student3. java、StudentTest3. java,對象初始化,默認(rèn)構(gòu)造方法(Default Constructor) 類被定義時如果沒有顯式地定義一個構(gòu)造方法,那么編譯器會自動創(chuàng)建一個默認(rèn)構(gòu)造方法。 public Student( ) 這使得能夠通過使用n
10、ew Student()語句產(chǎn)生學(xué)生類的對象。 但是一旦在類中自定義了構(gòu)造方法,編譯器就不會提供默認(rèn)的構(gòu)造方法了。 例: Student4. java、StudentTest4. java,對象初始化,成員初始化 public class Student String school = “NEUSOFT”; float java_point = getJavaPoint(); float c_point = getCPoint(); float average = getAvergePoint(java_point, c_point); public static float getJavaP
11、oint() public static float getCPoint() 例: StudentInit. java,對象初始化,初始化順序 類的變量會在任何方法(包括構(gòu)造方法)執(zhí)行之前得到初始化,即被賦予初值,靜態(tài)變量初始化在實例變量之前。 例: OrderOfInit. java,對象初始化,static補(bǔ)充 用修飾符static修飾的變量稱為類靜態(tài)變量,也叫做靜態(tài)變量或者類變量。靜態(tài)變量是類的變量,不屬于任何一個類的具體對象實例。它不保存在某個對象實例的內(nèi)存空間中,而是保存在類的內(nèi)存空間的公共存儲單元中。 也就是說,不論一個類具有多少個對象,靜態(tài)變量只有一個,任何一個類的對象訪問它,取
12、得的都是相同的數(shù)值。同樣地,任何一個類的對象去修改它,也都是在對同一個內(nèi)存單元進(jìn)行操作。靜態(tài)變量可以通過類名直接訪問,也可以通過對象來調(diào)用。采用這兩種方法取得的結(jié)果是相同的。 例:StaticTest.java、StaticInit. java,對象初始化,練習(xí) 創(chuàng)建一個桌子(Table)類,該類中有桌子名稱、重量、桌面寬度、長度和桌子高度屬性,以及以下幾個方法: (1). 構(gòu)造方法:初始化所有成員變量。 (2). area( ):計算桌面的面積。 (3). display( ):在屏幕上輸出所有成員變量的值。 (4). changeWeight(int w):改變桌子重量。 在測試類的mai
13、n()方法中實現(xiàn)創(chuàng)建一個桌子對象,計算桌面的面積,改變桌子重量,并在屏幕上輸出所有桌子屬性的值。,方法的使用,Java語言允許方法重載(overloading) ,為解決這類問題提供了很好的解決方案。 方法重載指一個類中有兩個或兩個以上同名的方法,但參數(shù)表不同。 在類中,對重要的方法進(jìn)行重載,這將為用戶使用這些方法提供方便。 例:Student5.java、StudentTest5. java,方法的使用,構(gòu)造方法的重載 方法重載的最主要的作用其實是實現(xiàn)同名的構(gòu)造方法可以接受不同的參數(shù)。 例: StudentTest6. java 注意:其中Student類中的toString()方法用于輸出
14、學(xué)生的信息,當(dāng)把對象引用放在打印語句中時會自動調(diào)用對象的toString()方法,如: System.out.println(s1); 等效于 System.out.println(s1.toString();,方法的使用,練習(xí) 為之前練習(xí)中的類Student與Table添加進(jìn)多個構(gòu)造方法,并分別添加toString()方法用于顯示對象的屬性值。,方法的使用,this關(guān)鍵字 this表示調(diào)用這個方法的對象的引用; 在類的構(gòu)造方法和實例方法中解決局部變量與實例變量同名的問題; 在構(gòu)造方法中使用this調(diào)用另一個構(gòu)造方法。 例: Leaf. Java、Flower.java,方法的使用,練習(xí) 定義
15、一個名為Dog的類,具有方法bark(),此方法應(yīng)根據(jù)不同的基本數(shù)據(jù)類型進(jìn)行重載,并根據(jù)被調(diào)用的版本,打印出不同類型的狗吠(baying)、嚎叫(howling)等消息。編寫main()方法來測試。 改寫上題的程序,讓兩個重載函數(shù)都有兩個參數(shù)(類型不同),但二者順序恰好相反,然后增加一個方法調(diào)用前兩個方法,調(diào)用第一個不用this,調(diào)用第二個使用this,最后在main()方法里調(diào)用第三個方法。,方法的使用,練習(xí) 聲明一個MathUtil類,提供: 方法total(int i):返回1到i的累加和,如果傳入的參數(shù)為0或負(fù)數(shù)則返回-1; 方法factorial(int i):返回i的階乘結(jié)果,如果
16、傳入的參數(shù)為負(fù)數(shù)則返回-1; 方法prime(int i),打印1-i之間的所有質(zhì)數(shù),如果傳入的參數(shù)為0或負(fù)數(shù)則返回”輸入錯誤!”。,方法的使用,方法的遞歸調(diào)用 遞歸是常用的編程技術(shù),其基本思想是“自己調(diào)用自己” 。 數(shù)學(xué)上最常見的遞歸問題就是自然數(shù)的階乘。 n=1,n! = 1; n1,n! = n * (n-1)!; 例: Recursion. Java,方法的使用,練習(xí) Fibonacci數(shù)列:13世紀(jì)意大利著名數(shù)學(xué)家斐波那契(Fibonacci)在他的著作算盤書中,記載著這樣一個有趣的問題:”由一對兔子開始,一年后可以繁殖成多少對兔子?”假設(shè)免子的生殖力是這樣的:每對兔子每一個月可以生
17、一對兔子,并且兔子在出生兩個月后就具有生殖后代的能力。 該數(shù)列特征如下,如:1; 1; 2; 3; 5; 8; 13; 21; 34; F1 = F2 = 1; Fn = Fn-1 + Fn-2 (n=3) 編寫方法求該數(shù)列的第n項的值,n值由參數(shù)傳入。,類的組織,包(package) 作用與Windows系統(tǒng)中的文件夾類似,它不具有任何特別的功能,只是用來存放一個或者多個類和接口的空間。 使用包可以避免同名類發(fā)生沖突,使類的管理更清晰,更有條理。 包可以嵌套使用,一個包中可以再有多個包,就像一個文件夾內(nèi)可以含有多個子文件夾一樣。,類的組織,包(package) 定義包:package 包名;
18、 定義包的語句必須放在源程序有效代碼的第一行。使用這個語句就可以創(chuàng)建具有指定名字的包,并且當(dāng)前程序中的所有類都屬于這個包。 如果在package語句的包名中含有符號“.”,則代表了目錄分隔符。在這種情況下,需要按照包名分割的順序,依次創(chuàng)建子文件夾中的子文件夾。 注意:Java package的命名習(xí)慣是所有字母全部小寫! 例如:package people.person.managers;,類的組織,包(package) 導(dǎo)入包 當(dāng)需要使用另一個包中的類時,需要先導(dǎo)入該包,導(dǎo)入的形式為:import 包名.類名; 其中,包名可以使用符號“ . ”來表明包的層次,如果要從一個包中引入多個類,則可
19、以用符號“*”來代替類名。例如:import java.awt.* ; 注意:“ * ”只能表示本層次包中的所有類,不包括子包中的類。所以必須多次使用import語句導(dǎo)入所有需要的類。 例如:import java.awt.* ; import java.awt.event.* ; 例: Package. Java,類的組織,使用包的好處 程序員能很容易確定同一包的類是相互關(guān)聯(lián)的; 程序員能很方便地了解到在哪里可以找到能完成特定功能的類; 避免產(chǎn)生類名沖突; 比如Java標(biāo)準(zhǔn)類庫中的常見包名: :提供與網(wǎng)絡(luò)編程有關(guān)的類和接口; java.io:提供與輸入輸出編程有關(guān)的類和接口; java.la
20、ng:提供Java 編程語言的基礎(chǔ)類。,訪問控制,類的訪問控制 只有public(公共)及無修飾符(缺省)兩種。 當(dāng)使用public修飾符時,表示所有其它的類都可以使用此類; 當(dāng)沒有修飾符時,則只有與此類處于同一包中的其它類可以使用此類。 例: PackageTest. Java,訪問控制,類成員的訪問控制 類成員的訪問控制符有public,private,protected及無修飾符4種: private(私有的):類中限定為private的成員只能在這個類中被訪問,在類外不可見。 無修飾符(缺省的):如果沒有訪問控制符,則該類成員可以被該類所在包中的所有其它類訪問。 protected(受
21、保護(hù)的):用該關(guān)鍵字修飾的類成員可以被同一類、被該類所在包中的所有其它類或其子類(可以不在同一包中)的實例對象訪問。 public:用public修飾的類成員可以被其他任何類(前提是對類成員所在的類有訪問權(quán)限) 。 例: PackageTest. Java,訪問控制,類成員訪問控制符與訪問能力之間的關(guān)系 :,常用工具類,字符串和數(shù)字的相互轉(zhuǎn)換 數(shù)字轉(zhuǎn)換為String:使用String類靜態(tài)方法String.valueOf()。例如:String s = String.valueOf( 45 ); String轉(zhuǎn)換為數(shù)字:因為用戶通過鍵盤輸入的數(shù)字的類型為String型,所以非常需要將其轉(zhuǎn)換為數(shù)
22、字。有2個靜態(tài)方法可以將String轉(zhuǎn)換為數(shù)字: Integer.parseInt():將String代表的整數(shù)型數(shù)字轉(zhuǎn)換為int型數(shù)值。格式為:Integer.parseInt(String str); Double.parseDouble():將String代表的浮點(diǎn)型數(shù)字轉(zhuǎn)換為double型數(shù)值。格式為:Double.parseDouble( String str)。 例: StrTest2. Java,常用工具類,練習(xí) 統(tǒng)計一個字符串中出現(xiàn)某個字母的次數(shù)(注意區(qū)分大小寫)。 String類中的相關(guān)方法: length( ):計算字符串長度,得到一個int型數(shù)值; indexOf( ):在字符串中定位某個子串,并返回位置編號 substring( ):截取字符串中的一部分,并作為一個新字符串返回; equals( ):比較兩個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于事故數(shù)據(jù)的乘用車AEB高速公路測試場景設(shè)計
- ChatGPT技術(shù)商業(yè)應(yīng)用潛力與實踐案例研究
- 主次干道交通護(hù)欄清潔與維護(hù)方案
- 分布式數(shù)據(jù)庫系統(tǒng)的設(shè)計與實現(xiàn)
- 工藝美術(shù)師崗位面試問題及答案
- 貴金屬首飾與寶玉石檢測員崗位面試問題及答案
- 熊兒童畫課件
- 神經(jīng)反饋療法在注意力缺陷多動障礙中的應(yīng)用-洞察闡釋
- 高效變量標(biāo)記算法-洞察闡釋
- 電視節(jié)目制作課件:電視音頻制作
- DB11T 593-2016高速公路清掃保潔質(zhì)量與作業(yè)要求
- 嘟嘟少兒英語beep演示簡化版
- GB/T 699-2015優(yōu)質(zhì)碳素結(jié)構(gòu)鋼
- GB/T 19096-2003技術(shù)制圖圖樣畫法未定義形狀邊的術(shù)語和注法
- GB/T 13808-1992銅及銅合金擠制棒
- 項目安全體系圖
- 中央財政科技計劃的項目結(jié)題審計指引講解文課件
- 職業(yè)暴露(銳器傷)應(yīng)急預(yù)案演練腳本
- 首屆全國報刊編校技能大賽決賽試卷(一)及答案
- 材料出入庫表格范本
- DB14∕T 2442-2022 政務(wù)數(shù)據(jù)分類分級要求
評論
0/150
提交評論