《java語(yǔ)言程序設(shè)計(jì)》第4章_第1頁(yè)
《java語(yǔ)言程序設(shè)計(jì)》第4章_第2頁(yè)
《java語(yǔ)言程序設(shè)計(jì)》第4章_第3頁(yè)
《java語(yǔ)言程序設(shè)計(jì)》第4章_第4頁(yè)
《java語(yǔ)言程序設(shè)計(jì)》第4章_第5頁(yè)
已閱讀5頁(yè),還剩115頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章 類的重用JAVA語(yǔ)言程序設(shè)計(jì)1目錄4.1 類的繼承4.2 Object類 4.3 終結(jié)類與終結(jié)方法4.4 抽象類4.5 類的組合 4.6 包的應(yīng)用4.7 本章小結(jié)24.1 類的繼承類的繼承聯(lián)想人的繼承。3父類(base class) (例如:學(xué)生)也稱基類、超類(superclass)是被直接或間接繼承的類子類(derived-class) (例如:大學(xué)生)也稱派生類 (subclass)繼承父類的屬性和行為子類可以增加屬性和行為子類也可以覆蓋(override)父類的屬性和行為4.1.1 繼承的概念基類和派生類類的繼承4動(dòng)物類層次舉例4.1.1 繼承的概念圖4_1一般具體動(dòng)物蛇蜥蜴鯨

2、爬行動(dòng)物哺乳動(dòng)物狗巨蜥 壁虎壁虎 是一種 蜥蜴 爬行動(dòng)物是 動(dòng)物的 一種類的繼承54.1.2 繼承的語(yǔ)法繼承的語(yǔ)法class childClass extends parentClass /類體類的繼承6公司中,有員工(Employees)及管理(Magagers)員工(Employees)屬性信息:?jiǎn)T工號(hào)(employeeNumber)姓名(name)地址(address)電話號(hào)碼(phoneNumber)管理人員(Managers)除具有員工的屬性外,還具有下面的屬性職責(zé)(responsibilities)所管理的職員(listOfEmployees)4.1.2 繼承的語(yǔ)法(續(xù))例4_1

3、類的繼承7Employee與Manager的類圖4.1.2 繼承的語(yǔ)法(續(xù))例4_1 EmployeeemployeeNumbe : intname : Stringaddress : StringphoneNumber : StringManagerresponsibilities:StringlistOfEmployees:String類的繼承8/父類Employeeclass Employee int employeeNumbe ; String name, address, phoneNumber ;/子類Managerclass Manager extends Employee /子

4、類增加的數(shù)據(jù)成員 String responsibilities, listOfEmployees;4.1.2 繼承的語(yǔ)法(續(xù))例4_1 類的繼承9設(shè)有三個(gè)類:Person, Employee, Manager。其類層次如圖:4.1.2 繼承的語(yǔ)法(續(xù))例4_2 PersonEmployeeManager類的繼承10public class Person public String name; public String getName() return name; public class Employee extends Person public int employeeNumber;

5、public int getEmployeeNumber() return employeeNumber; public class Manager extends Employee public String responsibilities; public String getResponsibilities() return responsibilities; 4.1.2 繼承的語(yǔ)法(續(xù))例4_2 類的繼承11public class Exam4_2Test public static void main(String args) Employee li = new Employee()

6、; = “李明; li.employeeNumber = 123456; System.out.println(li.getName(); System.out.println(li.getEmployeeNumber(); Manager he = new Manager(); = “何霞; he.employeeNumber = 543469; he.responsibilities = Internet project; System.out.println(he.getName(); System.out.println(he.getEmployeeNumber(); System.o

7、ut.println(he.getResponsibilities(); 4.1.2 繼承的語(yǔ)法(續(xù))例4_2測(cè)試 類的繼承12運(yùn)行結(jié)果Li Ming123456He Xia543469Internet project說(shuō)明子類不能直接訪問(wèn)從父類中繼承的私有屬性及方法,但可使用公有(及保護(hù))方法進(jìn)行訪問(wèn)4.1.2 繼承的語(yǔ)法(續(xù))例4_2測(cè)試結(jié)果 類的繼承13public class B public int a = 10; private int b = 20; protected int c = 30; public int getB() return b; public class A e

8、xtends B public int d; public void tryVariables() System.out.println(a); /允許 System.out.println(b); /不允許 System.out.println(getB(); /允許 System.out.println(c); /允許 4.1.2 繼承的語(yǔ)法(續(xù))例4_3 類的繼承144.1.3 隱藏和覆蓋隱藏和覆蓋子類對(duì)從父類繼承來(lái)的屬性(成員變量)及行為(成員方法)可以重新定義。類的繼承15屬性的隱藏子類擁有了兩個(gè)相同名字的變量,一個(gè)繼承自父類,另一個(gè)由自己聲明當(dāng)子類執(zhí)行繼承自父類的操作時(shí),處理的是繼

9、承自父類的變量,而當(dāng)子類執(zhí)行它自己聲明的方法時(shí),所操作的就是它自己聲明的變量4.1.3 隱藏和覆蓋(續(xù))屬性的隱藏 class Parent Float aNumber; Float getaNumber() return aNumber; class Child extends Parent Float aNumber; void show() System.out.print(aNumber) ;類的繼承16如何訪問(wèn)被隱藏的父類屬性調(diào)用從父類繼承的方法,則操作的是從父類繼承的屬性使用super.屬性4.1.3 隱藏和覆蓋(續(xù))訪問(wèn)被隱藏的父類屬性類的繼承17屬性的隱藏舉例class A1

10、int x = 2; public void setx(int i) x = i; void printa() System.out.println(x); 4.1.3 隱藏和覆蓋(續(xù))例4_4class B1 extends A1 int x=100; void printb() super.x = super.x +10 ; System.out.println (super.x= + super.x + x= + x); 類的繼承18public class Exam4_4Test public static void main(String args) A1 a1 = new A1()

11、; a1.setx(4); a1.printa(); B1 b1 = new B1(); b1.printb(); b1.printa(); b1.setx(6); / 將繼承來(lái)的x值設(shè)置為6 b1.printb(); b1.printa(); a1.printa(); 4.1.3 隱藏和覆蓋(續(xù))例4_4測(cè)試類的繼承19運(yùn)行結(jié)果4super.x= 12 x= 10012super.x= 16 x= 1001644.1.3 隱藏和覆蓋(續(xù))例4_4運(yùn)行結(jié)果類的繼承20子類可以對(duì)父類中的靜態(tài)屬性進(jìn)行操作。如在上面的例子中,將“int x = 2;”改為“static int x = 2;”,再編

12、譯及運(yùn)行程序,會(huì)得到下面的結(jié)果4super.x= 14 x= 10014super.x= 16 x= 1001616在上面的結(jié)果中,第一行及最后一行都是語(yǔ)句“a1.printa();”輸出的結(jié)果,顯然類中的printb()方法修改的是類中的靜態(tài)屬性x4.1.3 隱藏和覆蓋(續(xù))例4_4運(yùn)行結(jié)果類的繼承21方法覆蓋(重寫(xiě))如果子類不需使用從父類繼承來(lái)的方法的功能,則可以定義同名方法,重寫(xiě)其功能。稱為方法覆蓋同名方法是指方法頭部完全一致。子類重寫(xiě)父類的方法后,有兩個(gè)同名方法,若要調(diào)用父類的方法,需要用super.方法名。4.1.3 隱藏和覆蓋(續(xù))方法覆蓋 類的繼承22class A1 int x

13、 = 2; void print () System.out.println(x); class B1 extends A1 void print () System.out.println(“x的值為”+x) public class Ex4Test public static void main(String args) B1 b1=new B1(); b1.print(); 234.1.4 有繼承時(shí)的構(gòu)造方法有繼承時(shí)的構(gòu)造方法遵循以下的原則子類不能從父類繼承構(gòu)造方法子類可以在其構(gòu)造方法中調(diào)用父類構(gòu)造方法,調(diào)用語(yǔ)句必須出現(xiàn)在子類構(gòu)造方法的第一行,使用super關(guān)鍵字如子類構(gòu)造方法中沒(méi)有明確

14、調(diào)用父類構(gòu)造方法,則自動(dòng)調(diào)用父類的無(wú)參構(gòu)造方法類的繼承24public class Person protected String name, phoneNumber, address; public Person() this(, , ); public Person(String aName, String aPhoneNumber, String anAddress) name=aName; phoneNumber=aPhoneNumber; address=anAddress; 4.1.4 有繼承時(shí)的構(gòu)造方法(續(xù))例4_5 類的繼承25public class Employee ext

15、ends Person protected int employeeNumber; protected String workPhoneNumber; public Employee() /此處隱含調(diào)用構(gòu)造方法 Person() this(0, ); public Employee(int aNumber, String aPhoneNumber) /此處隱含調(diào)用構(gòu)造方法 Person() employeeNumber=aNumber; workPhoneNumber = aPhoneNumber; 4.1.4 有繼承時(shí)的構(gòu)造方法(續(xù))例4_5 類的繼承26public class Profe

16、ssor extends Employee protected String research; public Professor() super(); research = ; public Professor(int aNumber, String aPhoneNumber, String aResearch) super(aNumber, aPhoneNumber); research = aResearch; 4.1.4 有繼承時(shí)的構(gòu)造方法(續(xù))例4_5 類的繼承27在一個(gè)公司管理信息系統(tǒng)中,包括普通員工(Employees),其可能有的屬性信息包括員工號(hào)(employeeNumber

17、)姓名(name)地址(address)電話號(hào)碼(phoneNumber)管理者(Magagers),除具有普通員工所具有的屬性及行為外,還具有下面的屬性和行為職責(zé)(responsibilities)所管理的職員(listOfEmployees)工資的計(jì)算方法與一般員工不同;福利與一般員工不同顧客(Customers),可能有的屬性信息包括姓名(name)地址(address)電話號(hào)碼(phoneNumber)4.1.5 應(yīng)用舉例例4_6 類的繼承28類層次結(jié)構(gòu)4.1.5 應(yīng)用舉例(續(xù))例4_6 PersonEmployeeManagerCustomer類的繼承294.2 Object 類Ob

18、ject類Java程序中所有類的父類,處在類層次最高點(diǎn)包含了所有Java類的公共屬性。30Object類定義了所有對(duì)象必須具有的狀態(tài)和行為,較主要的方法如下public final Class getClass() 獲取當(dāng)前對(duì)象所屬的類信息,返回Class對(duì)象public String toString() 返回當(dāng)前對(duì)象本身的有關(guān)信息,按字符串對(duì)象返回public boolean equals(Objectobj) 比較兩個(gè)對(duì)象是否是同一對(duì)象,是則返回trueprotected Object clone( ) 生成當(dāng)前對(duì)象的一個(gè)拷貝,并返回這個(gè)復(fù)制對(duì)象Public int hashCode()

19、 返回該對(duì)象的哈希代碼值protected void finalize() throws Throwable 定義回收當(dāng)前對(duì)象時(shí)所需完成的資源釋放工作你的類不可以覆蓋終結(jié)方法,即有final修飾的方法4.2 Object類(續(xù))包含的主要方法 Object類31相等和同一的概念兩個(gè)對(duì)象屬于同一個(gè)類,屬性值相同,則稱二者相等(equal)一個(gè)對(duì)象兩個(gè)不同的名字,則稱這兩個(gè)對(duì)象同一(identical) 例如:a1=a2; 兩個(gè)對(duì)象同一,則肯定相等。兩個(gè)對(duì)象相等,不一定同一“=” 判斷的是這兩個(gè)對(duì)象是否同一4.2 Object類(續(xù))相等和同一 Object類32判斷兩個(gè)對(duì)象是否同一public

20、class Exam4_7public static void main(String args) BankAccount a = new BankAccount(Bob, 123456, 100.00f); BankAccount b = new BankAccount(Bob, 123456, 100.00f); if (a = b) System.out.println(YES); else System.out.println(NO); BankAccount類在2.5.1中聲明,此程序運(yùn)行的結(jié)果為“NO”,原因是使用等號(hào)“=”判斷的是兩個(gè)對(duì)象是否同一,顯然a和b是兩個(gè)對(duì)象4.2 Ob

21、ject類(續(xù))例4_7 Object類33public class BankAccount private String ownerName; private int accountNumber; private float balance; public BankAccount(String initName, int initAccountNumber, float initBalance) ownerName = initName; accountNumber = initAccountNumber; balance = initBalance; 三個(gè)屬性的get/set方法。34修改

22、剛才的程序public class Exam4_7public static void main(String args) BankAccount a = new BankAccount(Bob, 123456, 100.00f); BankAccount b = a; if (a = b) System.out.println(YES); else System.out.println(NO); 將a所指對(duì)象的引用賦給b,因此a與b指向的是同一個(gè)對(duì)象,a與b同一。輸出結(jié)果為“YES”4.2 Object類(續(xù))例4_7 Object類35equals 方法(判斷是否同一)Object是所有類

23、的父類,所有其他類都繼承了equals()方法Object類中的 equals() 方法的定義如下,可見(jiàn),也是判斷兩個(gè)對(duì)象是否同一public boolean equals(Object x) return this = x; 4.2 Object類(續(xù))equals方法 Object類36Object類中equals方法的使用舉例public class EqualsTestpublic static void main(String args)BankAccount a = new BankAccount(Bob, 123456, 100.00f); BankAccount b = new

24、 BankAccount(Bob, 123456, 100.00f); if (a.equals(b) System.out.println(YES); else System.out.println(NO); 由于不是同一對(duì)象,運(yùn)行結(jié)果仍然是“NO”4.2 Object類(續(xù))例4_8 37equlas方法的重寫(xiě)(判斷是否相等)String類中已經(jīng)重寫(xiě)了Object類的Equals方法,可以判別兩個(gè)字符串是否相等。4.2 Object類(續(xù))equals方法 的重寫(xiě)Object類38在BankAccount類中重寫(xiě)equals方法,因此方法頭與Object類中的equals方法完全相同。 相

25、等主要通過(guò)兩點(diǎn)判斷: 1、是否屬于同一個(gè)類 2、屬性值是否相等public boolean equals(Object x) if (this.getClass() != x.getClass() return false; BankAccount b = (BankAccount) x; return (this.getOwnerName().equals(b.getOwnerName() &(this.getAccountNumber() = b.getAccountNumber() &(this.getBalance() = b.getBalance(); 4.2 Object類(續(xù))e

26、quals方法 的重寫(xiě)Object類39equals方法的應(yīng)用舉例public class Apple private String color; private boolean ripe; public Apple(String aColor, boolean isRipe) color = aColor; ripe = isRipe; public void setColor(String aColor) color = aColor; public void setRipe(boolean isRipe) ripe = isRipe; public String getColor() r

27、eturn color; public boolean getRipe() return ripe; public String toString() if (ripe) return(A ripe + color + apple); else return(A not so ripe + color + apple); Object類4.2 Object類(續(xù))例4_940public boolean equals(Object obj) if (obj instanceof Apple) Apple a = (Apple) obj; return (color.equals(a.getCo

28、lor() & (ripe = a.getRipe(); return false; public class AppleTester public static void main(String args) Apple a = new Apple(red, true); Apple b = new Apple(red, true); System.out.println(a + is equal to + b + : + a.equals(b); System.out.println(a is identical to b: + (a = b); Apple c = a; System.ou

29、t.println(a + is equal to + c + : + a.equals(c); System.out.println(a is identical to c: + (a = c); 4.2 Object類(續(xù))例4_9Object類41運(yùn)行結(jié)果A ripe red apple is equal to A ripe red apple: truea is identical to b: falseA ripe red apple is equal to A ripe red apple: truea is identical to c: true4.2 Object類(續(xù))例4

30、_9運(yùn)行結(jié)果Object類42Clone方法根據(jù)已存在的對(duì)象構(gòu)造一個(gè)新的對(duì)象在根類Object 中被定義為protected,所以需要覆蓋為public實(shí)現(xiàn)Cloneable 接口,賦予一個(gè)對(duì)象被克隆的能力(cloneability) class MyObject implements Cloneable /Object類4.2 Object類(續(xù))Clone方法 43finalize方法在對(duì)象被垃圾回收器回收之前,系統(tǒng)自動(dòng)調(diào)用對(duì)象的finalize方法如果要覆蓋finalize方法,覆蓋方法的最后必須調(diào)用super.finalize4.2 Object類(續(xù))finalize方法 Objec

31、t類44getClass方法final 方法,返回一個(gè)Class對(duì)象,用來(lái)代表對(duì)象隸屬的類通過(guò)Class 對(duì)象,你可以查詢Class對(duì)象的各種信息:比如它的名字,它的基類,它所實(shí)現(xiàn)接口的名字等。void PrintClassName(Object obj) System.out.println(The Objects class is + obj.getClass().getName();4.2 Object類(續(xù))getClass方法 Object類45notify、notifyAll、wait方法 final方法,不能覆蓋這三個(gè)方法主要用在多線程程序中4.2 Object類(續(xù)) noti

32、fy、notifyAll、wait方法 Object類464.3 終結(jié)類與終結(jié)方法終結(jié)類與終結(jié)方法和方法終結(jié)類不能被繼承終結(jié)方法不能被子類重寫(xiě)474.3.1 終結(jié)類終結(jié)類 被final修飾符修飾的類特點(diǎn):不能被繼承,即沒(méi)有有子類終結(jié)類存在的理由安全: 黑客用來(lái)攪亂系統(tǒng)的一個(gè)手法是建立一個(gè)類的派生類,然后用他們的類代替原來(lái)的類設(shè)計(jì): 你認(rèn)為你的類是最好的或從概念上你的類不應(yīng)該有任何派生類終結(jié)類與終結(jié)方法48聲明ChessAlgorithm 類為final 類final class ChessAlgorithm . . . 如果寫(xiě)下如下程序:class BetterChessAlgorithm e

33、xtends ChessAlgorithm 編譯器將顯示一個(gè)錯(cuò)誤Chess.java:6: Cant subclass final classes: class ChessAlgorithmclass BetterChessAlgorithm extends ChessAlgorithm 1 error4.3.1 終結(jié)類(續(xù))一個(gè)例子 終結(jié)類與終結(jié)方法49終結(jié)方法 被final修飾符修飾的方法 特點(diǎn):不能被子類覆蓋(重寫(xiě))終結(jié)方法存在的理由對(duì)于一些比較重要且不希望子類進(jìn)行更改的方法,可以聲明為終結(jié)方法??煞乐棺宇悓?duì)父類關(guān)鍵方法的錯(cuò)誤重寫(xiě),增加了代碼的安全性和正確性提高運(yùn)行效率。通常,當(dāng)java

34、運(yùn)行環(huán)境(如java解釋器)運(yùn)行方法時(shí),它將首先在當(dāng)前類中查找該方法,接下來(lái)在其超類中查找,并一直沿類層次向上查找,直到找到該方法為止4.3.2 終結(jié)方法終結(jié)類與終結(jié)方法504.3.1 終結(jié)方法(續(xù))例4_10final 方法舉例class Parent public Parent() /構(gòu)造方法 final int getPI() return Math.PI; /終結(jié)方法說(shuō)明getPI()是用final修飾符聲明的終結(jié)方法,不能在子類中對(duì)該方法進(jìn)行重載,因而如下聲明是錯(cuò)的Class Child extends Parent public Child() /構(gòu)造方法 int getPI()

35、return 3.14; /重寫(xiě)父類中的終結(jié)方法,不允許終結(jié)類與終結(jié)方法514.4 抽象類抽象類代表一個(gè)抽象概念的類沒(méi)有具體實(shí)例對(duì)象的類,不能使用new方法進(jìn)行實(shí)例化類前需加修飾符abstract包括被它的所有子類共享的公共屬性和行為52存在意義抽象類是類層次中較高層次的概括,抽象類的作用是讓其他類來(lái)繼承它的抽象化的特征抽象類中可以包括被它的所有子類共享的公共行為抽象類可以包括被它的所有子類共享的公共屬性在程序中不能用抽象類作為模板來(lái)創(chuàng)建對(duì)象;在用戶生成實(shí)例時(shí)強(qiáng)迫用戶生成更具體的實(shí)例,保證代碼的安全性抽象類4.4 抽象類(續(xù))存在意義53將所有圖形的公共屬性及方法抽象到抽象類Shape。再將2

36、D及3D對(duì)象的特性分別抽取出來(lái),形成兩個(gè)抽象類TwoDimensionalShape及ThreeDimensionalShape2D圖形包括Circles、Triangles、Rectangles和Squares3D圖形包括Cube、Sphere、或Tetrahedron在UML中,抽象類的類名為斜體,以與具體類相區(qū)別4.4 抽象類(續(xù))幾何形狀的例子ShapeCircleTriangleRectangleSquareTwoDimensionalShapeThreeDimensionalShapeCubeSphereTetrahedron抽象類54例4-6中,如果在應(yīng)用系統(tǒng)中涉及到的人員只包括

37、:Customers,Employees 及 Managers。則Person 類的子類對(duì)象覆蓋了應(yīng)用中的對(duì)象,可以將Person 類聲明為抽象類4.4 抽象類(續(xù))人員的例子PersonEmployeeManagerCustomer抽象類554.4.1 抽象類的聲明抽象類聲明的語(yǔ)法形式為abstract class Number . . .如果寫(xiě): new Number();編譯器將顯示錯(cuò)誤抽象類564.4.2 抽象方法抽象方法聲明的語(yǔ)法形式為public abstract 返回值 方法名 (.);僅有方法頭,而沒(méi)有方法體,定義一個(gè)標(biāo)準(zhǔn)方法體地具體實(shí)現(xiàn)由子類完成,完成標(biāo)準(zhǔn)。抽象類可以包含抽象

38、方法抽象類57需注意的問(wèn)題一個(gè)子類如果不是抽象類,則它必須為父類中的所有抽象方法書(shū)寫(xiě)方法體,即重寫(xiě)父類中的所有抽象方法只有抽象類才能具有抽象方法,即如果一個(gè)類中含有抽象方法,則必須將這個(gè)類聲明為抽象類除了抽象方法,抽象類中還可以包括非抽象方法 4.4.2 抽象方法(續(xù))需注意的問(wèn)題抽象類58抽象方法的優(yōu)點(diǎn)隱藏具體的細(xì)節(jié)信息,所有的子類使用的都是相同的方法頭,其中包含了調(diào)用該方法時(shí)需要了解的全部信息強(qiáng)迫子類完成指定的行為,規(guī)定其子類需要用到的“標(biāo)準(zhǔn)”行為4.4.2 抽象方法(續(xù))抽象方法的優(yōu)點(diǎn)抽象類59各種圖形都需要實(shí)現(xiàn)繪圖方法,可在它們的抽象父類中聲明一個(gè)draw抽象方法abstract cl

39、ass GraphicObject int x, y; void moveTo(int newX, int newY) . . . abstract void draw();4.4.2 抽象方法(續(xù))一個(gè)繪圖的例子抽象類60然后在每一個(gè)子類中重寫(xiě)draw方法,例如:class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . 4.4.2 抽象方法(續(xù))一個(gè)繪圖的例子抽象類61LoanLeaseMortgageHouseLoanCarLoan

40、貸款(Loan)分為許多種類,如租借(Lease)、抵押(Mortgage)、房屋貸款(HouseLoan)、汽車貸款(CarLoan)等將Loan聲明為抽象類,并指定所有的子類對(duì)象都應(yīng)具有的行為,如計(jì)算月還款值(calculateMonthlyPayment),還款(makePayment),取得客戶信息(getClientInfo),其中前兩個(gè)因貸款種類不同計(jì)算方法也不同,可聲明為抽象方法,Loan的所有子類都必須對(duì)這兩個(gè)抽象方法進(jìn)行重寫(xiě)public abstract class Loan public abstract float calculateMonthlyPayment(); p

41、ublic abstract void makePayment(float amount); public Client getClientInfo() 4.4.2 抽象方法(續(xù))例4_11抽象類624.5 類的組合類的組合現(xiàn)實(shí)世界中,大多數(shù)對(duì)象由更小的對(duì)象組成 比如:廚房中包含炊具和冰箱。與現(xiàn)實(shí)世界的對(duì)象一樣,軟件中的對(duì)象也常常是由更小的對(duì)象組成。 比如:廚房類包含炊具類和冰箱類。類中的屬性是另外一個(gè)類的對(duì)象634.5.1 組合的語(yǔ)法組合的語(yǔ)法: 將類的某個(gè)屬性聲明為另外一個(gè)類的對(duì)象class Cooker / 類的語(yǔ)句 class Refrigerator / 類的語(yǔ)句class Kitc

42、hen Cooker myCooker; Refrigerator myRefrigerator;類的組合644.5.1 組合的語(yǔ)法(續(xù))例4_12一條線段包含兩個(gè)端點(diǎn)public class Point /點(diǎn)類 private int x, y; /coordinate public Point(int x, int y) this.x = x; this.y = y; public int GetX() return x; public int GetY() return y; 類的組合65car(汽車)對(duì)象是一個(gè)很好的例子,由于汽車的裝配是故障分析時(shí)需要考慮的一項(xiàng)因素,所以有助于客戶程序

43、員理解如何使用類,而且類創(chuàng)建者的編程復(fù)雜程度也會(huì)大幅度降低class Engine /發(fā)動(dòng)機(jī)類public void start() public void rev() public void stop() 4.5.2 組合與 繼承的比較(續(xù))Car的例子類的組合66class Wheel /車輪類 public void inflate(int psi) class Window /車窗類public void rollup() public void rolldown() class Door /車門(mén)類public Window window = new Window();public v

44、oid open() public void close() 4.5.2 組合與 繼承的比較(續(xù))Car的例子類的組合67public class Car public Engine engine = new Engine(); public Wheel wheel = new Wheel4;public Door left = new Door(),right = new Door(); public Car() for(int i = 0; i 4; i+) wheeli = new Wheel();public static void main(String args) Car car

45、= new Car();car.left.window.rollup();Car.wheel0.inflate(72);4.5.2 組合與 繼承的比較(續(xù))Car的例子類的組合684.6 包的應(yīng)用包為了解決類名沖突,Java提供包來(lái)管理類名空間。同一包中的類在默認(rèn)情況下可以互相訪問(wèn),不需要使用 import.694.6.1 Java 基礎(chǔ)類庫(kù)簡(jiǎn)介Java基礎(chǔ)類庫(kù)Java提供了許多現(xiàn)成的類,這些類的集合稱為基礎(chǔ)類庫(kù)-JFC,也稱應(yīng)用程序編程接口API。這些類放到不同的包中。Java提供的包主要有java.lang,java.io,java.math,java.utiljava.applet,ja

46、va.awt,java.awt.datatransferjava.awt.event,java.awt.image,java.beans,java.rmi,java.security,java.sql等包的應(yīng)用70語(yǔ)言包(java.lang)語(yǔ)言包java.lang提供了Java語(yǔ)言最基礎(chǔ)的類,包括Object類數(shù)據(jù)類型包裹類(the Data Type Wrapper)字符串類(String、StringBuffer)數(shù)學(xué)類(Math)系統(tǒng)和運(yùn)行時(shí)類(System、Runtime)類操作類(Class,ClassLoader)4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) 語(yǔ)言包包的應(yīng)用71數(shù)據(jù)包裹

47、類每一個(gè)基本數(shù)據(jù)類型都有一個(gè)數(shù)據(jù)包裹類。兩者可以相互轉(zhuǎn)換。4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù))數(shù)據(jù)類型包裹類基本數(shù)據(jù)類型數(shù)據(jù)包裹類booleanBooleanbyteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble包的應(yīng)用72基本數(shù)據(jù)類型轉(zhuǎn)化為包裹類對(duì)象基本數(shù)據(jù)類型轉(zhuǎn)換為包裹類對(duì)象double x = 1.2;Double a = new Double(x);Double b = new Double(-5.25); 字符串轉(zhuǎn)換為包裹類對(duì)象Double c = new Double(-2.34);Integ

48、er i = new Integer(1234); Integer j= Integer.valueOf(125); Double c= Double.valueOf(5.15);4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) 生成數(shù)據(jù)類型包裹類對(duì)象的方法包的應(yīng)用73包裹類對(duì)象轉(zhuǎn)化為基本數(shù)據(jù)類型使用相應(yīng)的方法anIntegerOValue() / 返回 int類型int m=Value();aCharacterObject.charValue() / 返回 char類型的數(shù)據(jù)使用特殊方法將字符串類型的對(duì)象直接轉(zhuǎn)換成對(duì)應(yīng)的基本數(shù)據(jù)類型int m= Integer.parseInt(“234”) / 返回

49、int類型的數(shù)據(jù)float n= Float.parseFloat(234.78) / 返回float類型的數(shù)據(jù)包的應(yīng)用4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) 得到基本數(shù)據(jù)類型數(shù)據(jù)的方法74public class LX3_1 public static void main(String args) /從基本數(shù)據(jù)類型到包裹類對(duì)象 int x = 100; Integer a = new Integer(x); /從字符串到包裹類對(duì)象 Integer b = new Integer(-100); Integer c = Integer.valueOf(200); /從包裹類對(duì)象到基本數(shù)據(jù)類型 /

50、Integer d=a+b+c; int y=Value()+Value()+Value(); System.out.println(y); /字符串到基本數(shù)據(jù)類型 int z=Integer.parseInt(200)+Integer.parseInt(100); System.out.println(z); 75String類該類字符串對(duì)象的值和長(zhǎng)度都不變化稱為常量字符串生成String類對(duì)象的方法可以這樣生成一個(gè)常量字符串String aString;aString = “This is a string” 調(diào)用構(gòu)造方法生成字符串對(duì)象new String(); new String(St

51、ring value); 例如:String bString=new String(“this is a string”); String cString=new String(aString);new String(char value); new String(char value, int offset, int count); new String(StringBuffer buffer);4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù))常量字符串類String764.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù))String類的常用方法1名稱解釋int length( )返回字符串中字符的個(gè)數(shù)char c

52、harAt(int index)返回序號(hào)index處的字符int indexOf(String s)在接收者字符串中進(jìn)行查找,如果包含子字符串s,則返回匹配的第一個(gè)字符的位置序號(hào), 否則返回-1String substring(int begin, int end)返回接收者對(duì)象中序號(hào)從begin開(kāi)始到end-1的子字符串public String split(String regex)public String split(String regex, int limit)以指定字符為分隔符,分解字符串String concat(String s)返回接收者字符串與參數(shù)字符串s進(jìn)行連接后的字符

53、串包的應(yīng)用774.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù))String類的常用方法2名稱解釋String replace(char oldChar, char newChar); 將接收者字符串的oldChar替換為newCharint compareTo(String s); 將接收者對(duì)象與參數(shù)對(duì)象進(jìn)行比較boolean equals(String s);接收者對(duì)象與參數(shù)對(duì)象的值進(jìn)行比較String trim( ); 將接收者字符串兩端的空字符串都去掉String toLowerCase()將接收者字符串中的字符都轉(zhuǎn)為小寫(xiě)String toUpperCase()將接收者字符串中的字符都轉(zhuǎn)為大寫(xiě)包的

54、應(yīng)用78public class LX3_2_S public static void main(String args) String str= This is a string; /創(chuàng)建字符串對(duì)象str String str1=new String(This is a string);/創(chuàng)建字符串對(duì)象str1 System.out.println(str.length(); System.out.println(str.charAt(5); System.out.println(str.indexOf(is); System.out.println(str.substring(5,7);

55、System.out.println(str.concat(#OK#); System.out.println(pareTo(str1); System.out.println(str.equals(str1); 79StringBuffer類(變量字符串類)其對(duì)象是可修改的字符串字符的個(gè)數(shù)稱為長(zhǎng)度(length)分配的存儲(chǔ)空間稱為容量(capacity)與String類的對(duì)象相比,執(zhí)行效率要低一些該類的方法不能被用于String類的對(duì)象4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) 變量字符串類StringBuffer包的應(yīng)用80生成StringBuffer類的對(duì)象new StringBuffer(

56、); 生成容量為16的空字符串對(duì)象new StringBuffer(int size); 生成容量為size的空字符串對(duì)象new StringBuffer(String aString); 生成aString的一個(gè)備份,容量為其長(zhǎng)度 +164.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) 生成StringBuffer類的對(duì)象包的應(yīng)用814.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) StringBuffer類的常用方法1名稱解釋int length ( )返回字符串對(duì)象的長(zhǎng)度int capacity( )返回字符串對(duì)象的容量void ensureCapacity(int size)設(shè)置字符串對(duì)象的容量void

57、setLength(int len)設(shè)置字符串對(duì)象的長(zhǎng)度。如果len的值小于當(dāng)前字符串的長(zhǎng)度,則尾部被截掉char charAt(int index)返回index處的字符包的應(yīng)用82名稱解釋void setCharAt(int index, char c)將index處的字符設(shè)置為cvoid getChars(int start, int end, char charArray, int newStart)將接收者對(duì)象中從start位置到end-1位置的字符拷貝到字符數(shù)組charArray中,從位置newStart開(kāi)始存放StringBuffer reverse( )返回將接收者字符串逆轉(zhuǎn)后

58、的字符串StringBuffer insert(int index, Object ob)將ob插入到index位置StringBuffer append(Object ob)將ob連接到接收者字符串的末尾4.6.1 Java基礎(chǔ)類庫(kù)簡(jiǎn)介(續(xù)) StringBuffer類的常用方法2包的應(yīng)用83 public class fuxi_6 public static void main(String args) String str= This string; /創(chuàng)建字符串對(duì)象str StringBuffer b_str=new StringBuffer();/創(chuàng)建可變字符串對(duì)象b_str; Sy

59、stem.out.println(長(zhǎng)度為:+b_str.length()+ 容量為:+b_str.capacity(); System.out.println(b_str.append(str); System.out.println(長(zhǎng)度為:+b_str.length()+ 容量為:+b_str.capacity(); b_str.setCharAt(4,#); System.out.println(b_str); System.out.println(b_str.reverse(); System.out.println(b_str.reverse(); System.out.printl

60、n(b_str.insert(4, is ); 84已知一個(gè)字符串,返回將字符串中的非字母字符都刪除后的字符串public class StringEditor public static String removeNonLetters(String original) StringBuffer aBuffer = new StringBuffer(original.length(); char aCharacter; for (int i=0; ioriginal.length(); i+) aCharacter = original.charAt(i); if (Character.isL

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論