版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java2程序設(shè)計(jì)實(shí)用教程(第2版),第3章 類與對(duì)象,3.1 面向?qū)ο蟪绦蛟O(shè)計(jì)概述 3.2 面向?qū)ο笈cUML建模 3.3 Java語(yǔ)言與面向?qū)ο筇匦?3.4 類的定義和對(duì)象的創(chuàng)建 3.5 方法 3.6 靜態(tài)成員 3.7 包 3.8 成員的訪問(wèn)控制 3.9 封裝 3.10 利用系統(tǒng)已有類,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.1面向?qū)ο蟪绦蛟O(shè)計(jì)概述,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.1.1面向?qū)ο笮g(shù)語(yǔ)的解釋,1.對(duì)象 什么是對(duì)象:現(xiàn)實(shí)世界中解決問(wèn)題的實(shí)物(包括有行為和屬性) 例如:咖啡貓 黃色的(屬性)愛(ài)睡覺(jué)(行為) 2.類 什么是類:對(duì)象的模板 模板內(nèi)容=類的特性(屬性)+行為(
2、方法) 類的成員 例如:貓類 (有顏色,貓齡等屬性;有睡覺(jué),吃食等行為。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.1 面向?qū)ο蟪绦蛟O(shè)計(jì)概述,類與對(duì)象關(guān)系 概念: 類(class)是既包括數(shù)據(jù)又包括作用于數(shù)據(jù)的一組操作的封裝體。 對(duì)象(object)是類的實(shí)例(instance)。,類,對(duì)象,抽象,實(shí)例化,方法,數(shù)據(jù)或變量,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.繼承 什么叫繼承?繼承是接收來(lái)自父輩的財(cái)產(chǎn) 在面向?qū)ο笾欣^承的外延是什么?擁有父輩所擁有的東西 子類的繼承子類擁有父輩的成員 例如:汽車 繼承 車 /所有種類的汽車都需要實(shí)現(xiàn)汽車的基本功能 類的繼承實(shí)現(xiàn)了代碼的重用。,Java2程序
3、設(shè)計(jì)實(shí)用教程(第2版),4.接口 接口像一個(gè)類定義的模板,它提供了與其他事物之間相互通信的規(guī)則條目,但并非具體實(shí)現(xiàn)。 例如:多個(gè)程序員開(kāi)發(fā)同一個(gè)應(yīng)用程序的不同類,約定不同類之間使用同一組方法進(jìn)行通信。則創(chuàng)建一個(gè)接口用于定義這些方法。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),5.封裝 數(shù)據(jù)隱藏。 成員的詳細(xì)信息對(duì) 于對(duì)象外的代碼是 私有的和不可見(jiàn)的。,數(shù)據(jù),方法,外界,訪問(wèn),Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.1.2面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)點(diǎn),1可重用性 2可擴(kuò)展性 3易于管理和維護(hù),Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.2面向?qū)ο笈cUML建模,建模是一項(xiàng)經(jīng)過(guò)檢驗(yàn)并被廣為接受的工程技術(shù)。
4、建立房屋和大廈的建筑模型,能幫助用戶得到實(shí)際建筑物的印象。 要生產(chǎn)合格的軟件就要有一套關(guān)于體系的結(jié)構(gòu)、過(guò)程和工具的規(guī)范。 建模的目的: 1.有助于按照實(shí)際情況或按照所需的樣式使系統(tǒng)可視化 2.能夠規(guī)約系統(tǒng)的結(jié)構(gòu)或行為 3.給出指導(dǎo)系統(tǒng)構(gòu)造的模板 4.使做出的決策文檔化,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.2.2UML建模語(yǔ)言,什么是UML? Unified Modeling Language(統(tǒng)一建模語(yǔ)言) UML是一種用來(lái)創(chuàng)建程序模型的圖形語(yǔ)言(即帶有語(yǔ)意的一種圖形記號(hào))??梢杂脕?lái)說(shuō)明代碼中對(duì)象之間的關(guān)系。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.2.3UML進(jìn)行面向?qū)ο蟮南到y(tǒng)分析設(shè)
5、計(jì),UML進(jìn)行面向?qū)ο蟮南到y(tǒng)分析設(shè)計(jì),其過(guò)程通常由以下3個(gè)部份組成。 識(shí)別系統(tǒng)的用例和角色 進(jìn)行系統(tǒng)分析,并抽取類 系統(tǒng)設(shè)計(jì),并設(shè)計(jì)類及其行為,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.3 Java語(yǔ)言與面向?qū)ο筇匦?Java中的類:信息以類為單位單獨(dú)封裝 Java中的封裝:無(wú)需關(guān)心調(diào)用對(duì)象的內(nèi)部細(xì)節(jié) Java中的繼承:只準(zhǔn)繼承一個(gè)類,但可以“繼承”多個(gè)接口。 Java中的多態(tài) Java中的垃圾回收機(jī)制:自動(dòng)回收垃圾內(nèi)存,Java2程序設(shè)計(jì)實(shí)用教程(第2版),類的封裝性、繼承性和多態(tài)性 類的封裝性 類的繼承性 類的多態(tài)性,數(shù)據(jù),操作,成員變量,成員方法,類,類的封裝性,訪問(wèn)權(quán)限,類的繼承性 類
6、的多態(tài)性,外部,Java2程序設(shè)計(jì)實(shí)用教程(第2版),類的繼承性 繼承的概念:子類擁有父類的成員。 特性: 1.子類自動(dòng)擁有父類全部成員(成員變量方法),人類(父),學(xué)生類(子),性別、姓名、身高、國(guó)籍,吃飯、睡覺(jué)、工作.,性別、姓名、身高、國(guó)籍,吃飯、睡覺(jué)、工作.,Java2程序設(shè)計(jì)實(shí)用教程(第2版),2.子類可以更改父類繼承的成員; 如學(xué)生類中,“工作”方法會(huì)有自己的限制。 3.子類可以增加自己的成員; 如學(xué)生類中,添加“學(xué)習(xí)”、“考試”等方法。 4.子類不能刪除父類任何成員。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),Java的單繼承,C,java,多繼承:一個(gè)類有多個(gè)直接父類??梢該碛卸鄠€(gè)
7、父類的屬性或方法。,單繼承:一個(gè)類只有一個(gè)直接父類,若需要繼承其他方法,則通過(guò)接口實(shí)現(xiàn)。,注意:java中只支持單繼承。即子類只有一個(gè)直接父類。 多繼承特點(diǎn)通過(guò)接口實(shí)現(xiàn)。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),類的多態(tài)性 多態(tài):允許擁有相同的形式,但在不同情況下?lián)碛胁煌瑱C(jī)能的特性。如“” 多態(tài)性方法執(zhí)行的多樣性 重載:方法名同,參數(shù)列表不同 覆蓋:子類重寫了父類中同名的方法。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.4類的定義和對(duì)象的創(chuàng)建,程序運(yùn)行可理解為做三件事: 建立對(duì)象 使用對(duì)象:對(duì)象之間傳遞消息,程序處理消息作出響應(yīng) 運(yùn)行完畢收回對(duì)象所占空間。 對(duì)象的生命周期:創(chuàng)建運(yùn)行消亡,獲得內(nèi)存
8、空間,進(jìn)行各種操作,使用完釋放內(nèi)存,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.4.1 定義類:類聲明類主體,類定義的格式: 類聲明 成員變量的聲明; 成員方法的聲明及實(shí)現(xiàn); ,類主體,類,注意與c有何區(qū)別!變量與方法的聲明與定義均不允許放在類主體外面!,class 類名 代碼; ,數(shù)據(jù),方法,Java2程序設(shè)計(jì)實(shí)用教程(第2版),聲明類:權(quán)限 特性 名字 語(yǔ)法: 修飾符 class 類 extends 父類 implements 接口列表,類的修飾符用來(lái)說(shuō)明類的特殊性質(zhì)。分為三種: 訪問(wèn)控制符: public(公共類)、friendly(缺省類) protected(保護(hù)類)、 private
9、(私有類)多見(jiàn)于內(nèi)嵌類) 抽象類說(shuō)明符:abstract 最終類說(shuō)明符:final,關(guān)鍵字,類名,表示繼承哪個(gè)父類,表示繼承哪些接口,Java2程序設(shè)計(jì)實(shí)用教程(第2版),例:聲明一個(gè)公共類 Data1: public class Data1 定義一個(gè)公共類 人類: 定義一個(gè)類 學(xué)生類:,public class Man ,class Student ,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.4.2類之間的關(guān)系,USES-A關(guān)系 HAS-A關(guān)系 IS-A關(guān)系,Java2程序設(shè)計(jì)實(shí)用教程(第2版),1.USES-A關(guān)系,類A的方法操縱了類B(對(duì)象)的成員,則稱之為類A”USES-A”(用到了)
10、類B. 例3-1,轎車類(Car),其他類(Sample3_1),調(diào)用,USES-A關(guān)系,Public class Sample3_1 c.startIsEnough(); ,Java2程序設(shè)計(jì)實(shí)用教程(第2版),2. HAS-A關(guān)系,HAS-A關(guān)系是一種擁有關(guān)系,若類A中有 B類型的成員引用變量,則類A “HAS-A” (擁有)類B. 例3-2,c.getTyreInfo().getMaterial();,轎車類(Car),輪胎類(Tyre),擁有,HAS-A關(guān)系,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.IS-A關(guān)系,在面向?qū)ο笾小癐S-A”的概念是基于繼承的,旨在表達(dá)一個(gè)類是另一個(gè)類的子
11、類。也就是說(shuō),若類A是類B子類的一種,則可以說(shuō)類A“IS-A”(是一種)類B。 例如:“蘋果” 是 “水果” 的種類,class Fruit public void canEat() ,class Apple ,Apple a=new Apple() a.canEat();,水果,蘋果,繼承,IS-A關(guān)系,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.4.3構(gòu)造函數(shù),要使用對(duì)象,首先必須構(gòu)造它們,并指定它們的初始狀態(tài),然后將方法應(yīng)用于對(duì)象。 在Java程序設(shè)計(jì)語(yǔ)言中,使用構(gòu)造函數(shù)來(lái)構(gòu)造新的實(shí)例,作用是構(gòu)造并初始化對(duì)象。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),構(gòu)造函數(shù)的創(chuàng)建,創(chuàng)建無(wú)參構(gòu)造函數(shù) 例3-
12、3 創(chuàng)建帶參構(gòu)造函數(shù) 例3-4,Java2程序設(shè)計(jì)實(shí)用教程(第2版),構(gòu)造函數(shù)的特點(diǎn)有:,(1)構(gòu)造函數(shù)的方法名與類名相同。 (2)構(gòu)造函數(shù)沒(méi)有返回類型,也無(wú)需聲明類型。 (3)構(gòu)造函數(shù)的主要作用是完成對(duì)類對(duì)象的初始化工作,并傳遞參數(shù)。 (4)構(gòu)造函數(shù)不能由編程人員顯式地直接調(diào)用。由系統(tǒng)調(diào)用。 (5)一個(gè)類可以定義多個(gè)構(gòu)造方法,缺省構(gòu)造函數(shù)為無(wú)參的默認(rèn)構(gòu)造函數(shù),不執(zhí)行任何代碼。 (6)構(gòu)造方法可以重載,以參數(shù)的個(gè)數(shù)、類型或排列順序區(qū)分。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.3.4類成員,聲明成員變量 修飾符 static final transient 數(shù)據(jù)類型 變量名,訪問(wèn)控制符: p
13、ublic(公共類) friendly(缺省類) protected(保護(hù)類) private(私有類),類(靜態(tài))成員變量,常量,臨時(shí)變量,類聲明 成員變量的聲明; 成員方法的聲明及實(shí)現(xiàn); ,Java2程序設(shè)計(jì)實(shí)用教程(第2版),例3-5:定義Student類,聲明3個(gè)成員變量分別表示姓名、年齡、班級(jí): public class Student/類聲明 public String stuName; public int stuAge; public String stuClass; 成員變量的引用,/聲明成員變量,Java2程序設(shè)計(jì)實(shí)用教程(第2版),2.成員變量的初始值,創(chuàng)建對(duì)象后,如果對(duì)
14、象有成員變量,則系統(tǒng)會(huì)自動(dòng)為其分配一個(gè)初始值。 例3-6 例3-7,注意:對(duì)象引用型成員變量,其初始值為“null”,表示此引用沒(méi)有指向任何對(duì)象。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.4.5 對(duì)象的創(chuàng)建,聲明對(duì)象 類名 對(duì)象 例:Student s; 對(duì)象實(shí)例化 對(duì)象 = new 類的構(gòu)造方法(參數(shù)列表) s= new Student(); 引用對(duì)象的成員變量及方法:用“.”運(yùn)算符 對(duì)象.成員變量 對(duì)象.成員方法(參數(shù)列表) = 王強(qiáng); /引用對(duì)象的成員變量,Student,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.5 方法,方法的定義 方法的基本組成:方法的聲明+方法體
15、修飾符 static 返回值類型 方法(參數(shù)列表) throws 異常類 語(yǔ)句序列; return 返回值; ,方法聲明:,方法體:,Java2程序設(shè)計(jì)實(shí)用教程(第2版),例: int sub(int a, int b) return a-b; ,int sub(int a, int b) int c; c=a-b; return c; ,Java2程序設(shè)計(jì)實(shí)用教程(第2版),說(shuō)明: 1.參數(shù)序列 指定要傳遞給方法什么樣的信息 (1)可以是java中的任何類型,包括基本數(shù)據(jù)參數(shù)類型、對(duì)象引用類型。 (2)每個(gè)參數(shù)必須包括類型與變量標(biāo)識(shí)符,若有多個(gè)參數(shù),則用逗號(hào)將其分隔。如(int a,int
16、b),Java2程序設(shè)計(jì)實(shí)用教程(第2版),2.方法體 方法體是該方法具體業(yè)務(wù)代碼的實(shí)現(xiàn)。 return語(yǔ)句負(fù)責(zé)方法的返回。 3.返回值類型 返回值類型指定了該方法返回結(jié)果的類型。可以是基本數(shù)據(jù)類型或?qū)ο笠妙愋?,沒(méi)有返回值也要使用void關(guān)鍵字。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),返回值規(guī)則:,可以在具有對(duì)象引用返回類型的方法中返回null,但基本數(shù)據(jù)類型作為返回類型則不可以返回null。 對(duì)象給也是完全合法的返回值類型,如數(shù)組。 在具有基本數(shù)據(jù)返回類型的方法內(nèi),可以返回任何值,只要其能夠自動(dòng)轉(zhuǎn)換返回值類型。如返回值為double,返回整數(shù)4是可以的。但返回值為int時(shí),返回一個(gè)浮點(diǎn)數(shù)1
17、2.43則 報(bào)錯(cuò)。 一定不能在具有void返回類型的方法中返回任何內(nèi)容。 在具有對(duì)象引用返回類型的方法內(nèi),可以返回任何類型的對(duì)象引用,只要返回的引用與返回類型相同或可自動(dòng)轉(zhuǎn)換為返回類型即可。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.5.2 方法重載,概念: 同一個(gè)類中多個(gè)方法有相同的名字,不同的參數(shù)列表,這種情況稱為方法重載。 如:public double changeSize(int size,String name, float pattern) public void changeSize(int size,String name) private int changeSize(in
18、t size,float pattern) void changeSize(float pattern,String name) ?方法返回類型不同,參數(shù)相同,算不算重載? 注意: 返回類型不同并不足以構(gòu)成方法重載。 當(dāng)重載方法被調(diào)用時(shí),編譯器根據(jù)參數(shù)的類型和數(shù)量來(lái)確定實(shí)際調(diào)用哪個(gè)重載方法的版本。例3-8,Java2程序設(shè)計(jì)實(shí)用教程(第2版),方法調(diào)用進(jìn)行匹配的時(shí)候,首先選擇直接匹配的方法,如果沒(méi)有,則將參數(shù)進(jìn)行提升轉(zhuǎn)換后再匹配方法,總是匹配最接近的方法?;绢愋蛣t按照基本數(shù)據(jù)類型間的自動(dòng)轉(zhuǎn)換關(guān)系;引用類型則尋找最能兼容傳遞的參數(shù)。 例3-9 多匹配選擇示例例3-10,Java2程序設(shè)計(jì)實(shí)用教
19、程(第2版),3.5.3遞歸,遞歸方法就是自調(diào)用方法,在方法體內(nèi)直接或間接地調(diào)用自己。有兩種方式: 1.直接遞歸 2.間接遞歸,Java2程序設(shè)計(jì)實(shí)用教程(第2版),直接遞歸:即在方法體內(nèi)調(diào)用方法本身。 例:求斐波那數(shù)列第n項(xiàng) 斐波那數(shù)列:f(0)=f(1)=1 f(n)=f(n-1)+f(n-2)(n1) 例3-11,Java2程序設(shè)計(jì)實(shí)用教程(第2版),間接遞歸:函數(shù)中調(diào)用其他函數(shù),其他函數(shù)又調(diào)用本函數(shù)。 例3-12,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.6靜態(tài)成員,靜態(tài)修飾符static,修飾類中的靜態(tài)屬性和方法,(1)靜態(tài)屬性被static修飾的屬性稱為靜態(tài)屬性(類屬性)。 特點(diǎn):
20、它們是類的屬性,而不屬于任何一個(gè)類的具體對(duì)象。即在一個(gè)類中只能有一個(gè)這類字段,并且由類調(diào)用,無(wú)需引用任何對(duì)象。 (2)靜態(tài)方法被static修飾的方法成為靜態(tài)方法(類方法)。 特點(diǎn):不與任何對(duì)象相關(guān)聯(lián)。能夠在它的類的任何對(duì)象訪問(wèn)前輩訪問(wèn),即使沒(méi)有對(duì)象也能調(diào)用該方法。靜態(tài)方法只能調(diào)用靜態(tài)屬性。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),例: public class StaticDemo public static String s=“我是靜態(tài)變量” public static void printInfo() System.out.println(“我是靜態(tài)方法”); ,問(wèn)?在其他類中如何調(diào)用靜態(tài)
21、變量和方法?例3-13,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.6.2靜態(tài)變量與常量,在java中,表示常量的方法是通過(guò)靜態(tài)成員變量的方式來(lái)實(shí)現(xiàn)的: 如:聲明3個(gè)常量X,Y,Z: public static final int X=10; public static final int Y=20; public static final int Z=40; “public static final”相當(dāng)于表示常量的修飾符。,公共的,即所有對(duì)象都能夠訪問(wèn)。,靜態(tài)的,即無(wú)需創(chuàng)建任何對(duì)象直接可通過(guò)類調(diào)用。,最終的,即定義的值為永久的,不能改變。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),靜態(tài)屬性的初始
22、化,靜態(tài)成員變量的初始化要求在靜態(tài)語(yǔ)句塊 結(jié)束之前必須完成。一方面可以在聲明的 同時(shí)進(jìn)行初始化,另一方面可以在靜態(tài)語(yǔ) 句塊中進(jìn)行初始化。 例3-4,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.6.3靜態(tài)成員的訪問(wèn),. 例3-15 1.靜態(tài)方法訪問(wèn)非靜態(tài)成員,靜態(tài)成員生命周期比非靜態(tài)要長(zhǎng),當(dāng)訪問(wèn)靜態(tài)成員時(shí),非靜態(tài)成員不一定存在,因此靜態(tài)方法不能訪問(wèn)非靜態(tài)屬性。同樣道理,靜態(tài)方法不能使用this預(yù)定對(duì)象關(guān)鍵字。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),例3-16 靜態(tài)方法訪問(wèn)非靜態(tài)成員示例1 例3-17 靜態(tài)方法訪問(wèn)非靜態(tài)成員示例2,Java2程序設(shè)計(jì)實(shí)用教程(第2版),2.非靜態(tài)方法訪問(wèn)靜態(tài)成員 非
23、靜態(tài)方法產(chǎn)生時(shí),靜態(tài)成員已經(jīng)存在。因此靜態(tài)方法在任何時(shí)候都可以訪問(wèn)靜態(tài)成員。 例3-18,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.6.4main方法,Main方法特殊的靜態(tài)方法,作為程序的入口,由于不對(duì)任何對(duì)象施加操作(實(shí)為執(zhí)行時(shí)還無(wú)任何對(duì)象產(chǎn)生),因此聲明為static;該方法由虛擬機(jī)調(diào)用,所以必須為public;而方法不需要返回值,因此聲明為void。 聲明:public static void main(String args) 例3-19,Main方法規(guī)定有一個(gè)類型為String的入?yún)?,取名為args。用于接收命令行輸入的參數(shù)。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.6.5 Fa
24、ctory方法,Java的靜態(tài)方法有一種常見(jiàn)的用途,就是使用Factory方法產(chǎn)生不同風(fēng)格的對(duì)象,例如NumberFormat類使用Factory方法產(chǎn)生不同風(fēng)格的格式對(duì)象。Factory Method是最常用的模式了,F(xiàn)actory方法在Java程序系統(tǒng)中可以說(shuō)是隨處可見(jiàn)。 Factory方法就相當(dāng)于創(chuàng)建實(shí)例對(duì)象的new,我們經(jīng)常要根據(jù)類Class生成實(shí)例對(duì)象,如A a=new A() ,Factory Method也是用來(lái)創(chuàng)建實(shí)例對(duì)象的,所以以后new時(shí)可以考慮實(shí)用factory模式(工廠模式),雖然這樣做,可能多做一些工作,但會(huì)給系統(tǒng)帶來(lái)更大的可擴(kuò)展性和盡量少的修改量。,Java2程序設(shè)
25、計(jì)實(shí)用教程(第2版),Factory作用:完成復(fù)雜情況下的初始化工作。 盡量將長(zhǎng)的代碼分派“切割”成每段,將每段再“封裝”起來(lái)。這樣就需要將創(chuàng)建實(shí)例的工作與使用實(shí)例的工作分開(kāi), 也就是說(shuō),讓創(chuàng)建實(shí)例所需要的大量初始化工作從構(gòu)造函數(shù)中分離出去。這時(shí)我們就需要Factory工廠模式來(lái)生成對(duì)象了。 使用工廠方法要注意幾個(gè)角色,首先要定義產(chǎn)品接口, 如Fruit,產(chǎn)品接口下有接口的實(shí)現(xiàn)類,如Apple,其次要有一 個(gè)factory類,用來(lái)生成產(chǎn)品。 例Factory方法實(shí)例:例3-20,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.7 包,概念:包是一種將相關(guān)類,接口或其他包組織起來(lái)的集合體。 目的:用來(lái)
26、管理類名空間,將包含類代碼的文件組織起來(lái),易于查找和使用,避免同名類發(fā)生沖突。 內(nèi)容:類,接口及其他包。 說(shuō)明:包是一種松散的類集合,一般在不要求處于同一個(gè)包中的類有明確的相互關(guān)系,但是由于同一包的類在默認(rèn)情況下可以互相訪問(wèn),因此常把需要在一起工作的類放在一個(gè)包里。包也稱類庫(kù),Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.7.1 包的定義,(1)缺省情況下為無(wú)名包 (2)有名包的創(chuàng)建:使用package語(yǔ)句 如:package pname; 3-13 或 package dir1.dir2.pname; 包就是一個(gè)文件夾,里面存放該程序所生成的所有.class文件,包中的“.”號(hào)表示子文件夾。 默
27、認(rèn)包中類之間可以相互訪問(wèn)public,protected或默認(rèn)訪問(wèn)權(quán)限的數(shù)據(jù)成員和成員函數(shù)。默認(rèn)包中的類不能被其他包中的類引用。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),package語(yǔ)句必須放在源文件最前面,之前不可以有其他任何語(yǔ)句; 每個(gè)源文件最多只能有一條package語(yǔ)句。 例3-21 將類Sample3_21放至包c(diǎn)hapter03的sample3_21中。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),JDK環(huán)境下包中類的編譯和運(yùn)行,編譯時(shí):javac 運(yùn)行: d:javajava,d CLASSPATH路徑 Myclass.java CLASSPATH變量指明包存放的位置。例如: java
28、c d d:java Sample3_21.java 結(jié)果:直接在d:java下創(chuàng)建在myclass.java指明的包目錄,并把Myclass.class拷到該目錄下。,包名.myclass,例如: java chapter03.sample3_21.Sample3_21,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.7.2 類的導(dǎo)入,(1)加載引用(類短名)使用import語(yǔ)句 格式:import mypack1.mypack2.Myclass 或 import mypack1. mypack2.* 注意: 1. Import語(yǔ)句必須先于所有類聲明。 2.使用(*)只能表示本層次的所有類,而不包
29、括子層次下的類。 如 import java.awt.*; import java.awt.event.*;/上面的語(yǔ)句未包括event 子包中的類 3. 用(*)一般適用于要用到同個(gè)包當(dāng)中的多個(gè)類的情況。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),(2)類長(zhǎng)名:直接使用包名、類名前綴(用在語(yǔ)句中) 格式: mypack1.mypack2.Myclass 例如:java.util.Date d1=new java.util.Date(),Java2程序設(shè)計(jì)實(shí)用教程(第2版),(3)直接引用:在同一文件夾下(私有類除外) 將無(wú)名包中的引用類與被引用類存貯在同一物理空間 例如:假如Car和Sample
30、3_3這兩個(gè)類在向一個(gè)目錄下,你就可以在Sample3_3類中創(chuàng)建一個(gè)Car實(shí)例,無(wú)需導(dǎo)入Car這個(gè)類。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),注意:java中java.lang包中的類系統(tǒng)是自動(dòng)引入的,即使不用import語(yǔ)句,每個(gè)源文件中系統(tǒng)編譯時(shí)都會(huì)自動(dòng)引入java.lang.*中的類。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),兩種特殊情況需要注意: 1.兩個(gè)包中有同名類,但只用到其中一個(gè)及其他不同名的類,則在import語(yǔ)句中明確給出需要引用的類名。如例3-22 2.兩個(gè)包中有同名類,且都要使用,則直接在語(yǔ)句中指明調(diào)用哪個(gè)類。如例3-23,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.7.3
31、靜態(tài)導(dǎo)入,從Java SE 5.0開(kāi)始,導(dǎo)入語(yǔ)句不但可以導(dǎo)入類,還具有導(dǎo)入靜態(tài)方法和靜態(tài)成員變量的功能,不過(guò)需要在關(guān)鍵字“import”和包名之間添加關(guān)鍵字“static”,語(yǔ)法如下。 import static .*; import static .; “*”還是代表通配符,不過(guò)這里表示的是指定類下面所有靜態(tài)的方法或成員變量。如果要明確指明要使用的方法或成員變量,用第2行語(yǔ)法。碰到不同類下同名靜態(tài)方法或成員變量時(shí),解決沖突的方法類似上一小節(jié),這里不再贅述。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.8成員的訪問(wèn)控制,成員的訪問(wèn)是指以下兩種不同的操作: 一個(gè)類中的方法代碼是否能夠調(diào)用(調(diào)用)另
32、一個(gè)類中的成員。 一個(gè)類是否能夠繼承其父類的成員。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),所有類A,所有子類C,同包中類B 包中子 類E,本類D,訪問(wèn)控制符:,Java2程序設(shè)計(jì)實(shí)用教程(第2版),公共類型:public 例3-26 私有類型:private 例3-27 默認(rèn)類型:default 例3-28 保護(hù)類型:protected,Java2程序設(shè)計(jì)實(shí)用教程(第2版),封裝是一個(gè)面向?qū)ο蟮男g(shù)語(yǔ),其含義很簡(jiǎn)單,就是把東西包裝起來(lái)。換言之,成員變量和方法的定義都包裝于類定義之中,類定義可以看成是將構(gòu)成類的成員變量和方法封裝起來(lái)。 通過(guò)限定類成員的可見(jiàn)性,可以使類成員中的某些屬性和方法能夠不被
33、程序的其他部分訪問(wèn),它們被隱藏了起來(lái),只能在定義的類中使用,這就是面向?qū)ο笾袑?shí)現(xiàn)封裝的方式。,3.9封 裝,成員變量,成員方法,類,外部,Java2程序設(shè)計(jì)實(shí)用教程(第2版),Java中封裝需要遵循的規(guī)則: 用訪問(wèn)限制修飾符保護(hù)成員變量,通常是private。 建立公有的public訪問(wèn)方法,強(qiáng)制調(diào)用代碼通過(guò)這些方法訪問(wèn)成員變量,而不是直接調(diào)用。 例3-29,Java2程序設(shè)計(jì)實(shí)用教程(第2版),分析: width和height成員變量被封裝,必須通過(guò)setProerty方法才能訪問(wèn),由于在setProerty方法中設(shè)置了檢驗(yàn)值正確性的規(guī)則,所以不可能設(shè)置錯(cuò)誤的width和height值,增加
34、代碼的健壯性。 封裝后不但可以提高健壯性,還可以提高靈活性,例如,若因需要將height或width的值改為String類型,如果沒(méi)有封裝,代碼一旦修改,則所有調(diào)用該值的代碼都需要更改;而封裝后只需要修改設(shè)置成員值的方法,將變化限制在一個(gè)較小的范圍內(nèi),使外界無(wú)需做任何改變?nèi)阅芾^續(xù)調(diào)用。例3-30,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.10 利用系統(tǒng)已有的類,通過(guò)前面幾節(jié)的介紹,讀者已經(jīng)對(duì)類的定義及對(duì)象的創(chuàng)建與使用有了一定的了解。本節(jié)將介紹Java類庫(kù)中提供的幾個(gè)常用的處理日期時(shí)間的類。通過(guò)對(duì)這幾個(gè)類的介紹,使讀者了解利用系統(tǒng)已有的類的思想。,Java2程序設(shè)計(jì)實(shí)用教程(第2版),3.10.1 Date類,在標(biāo)準(zhǔn)Java類庫(kù)中包含一個(gè)Date類,其對(duì)象用來(lái)描述一個(gè)時(shí)間點(diǎn),如“September 22,2007,23:59:59 GMT”。在使用Date類時(shí)要在代碼的開(kāi)始添加“imp
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《班組安全教育課程》課件
- 單位管理制度集粹選集【員工管理】十篇
- 單位管理制度合并選集【人力資源管理】十篇
- 七年級(jí)下《皇帝的新裝》蘇教版-課件
- 單位管理制度范例匯編【職員管理篇】十篇
- 《標(biāo)準(zhǔn)化裝修》課件
- 《項(xiàng)目管理手冊(cè)》附件1至附件123
- (高頻非選擇題25題)第1單元 中華人民共和國(guó)的成立和鞏固(解析版)
- 2019年高考語(yǔ)文試卷(新課標(biāo)Ⅰ卷)(解析卷)
- 2015年高考語(yǔ)文試卷(新課標(biāo)Ⅱ卷)(解析卷)
- JT-T-1078-2016道路運(yùn)輸車輛衛(wèi)星定位系統(tǒng)視頻通信協(xié)議
- 2024-2029年中國(guó)人工骨行業(yè)發(fā)展分析及發(fā)展前景與趨勢(shì)預(yù)測(cè)研究報(bào)告
- 2024年高校教師資格證資格考試試題庫(kù)及答案(各地真題)
- 扭虧增盈提質(zhì)增效方案
- 侵權(quán)法智慧樹(shù)知到期末考試答案章節(jié)答案2024年四川大學(xué)
- 期末考試卷2《心理健康與職業(yè)生涯》(解析卷)高一思想政治課(高教版2023基礎(chǔ)模塊)
- 年度安全生產(chǎn)投入臺(tái)賬(詳細(xì)模板)
- 中醫(yī)病歷書(shū)寫基本規(guī)范本
- 一年級(jí)帶拼音閱讀
- clsim100-32藥敏試驗(yàn)標(biāo)準(zhǔn)2023中文版
- 前列腺癌手術(shù)后護(hù)理
評(píng)論
0/150
提交評(píng)論