面向?qū)ο蠹夹g(shù)基礎(chǔ)課件_第1頁
面向?qū)ο蠹夹g(shù)基礎(chǔ)課件_第2頁
面向?qū)ο蠹夹g(shù)基礎(chǔ)課件_第3頁
面向?qū)ο蠹夹g(shù)基礎(chǔ)課件_第4頁
面向?qū)ο蠹夹g(shù)基礎(chǔ)課件_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)主要內(nèi)容4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它主要內(nèi)容4.1面向?qū)ο蟮幕靖拍?.1面向?qū)ο缶幊痰母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)基本思想:將數(shù)據(jù)以及對于這些數(shù)據(jù)的操作,封裝在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中。所有的對象都同時(shí)擁有屬性以及與這些屬性相關(guān)的行為。對象之間的聯(lián)系是通過消息來實(shí)現(xiàn)的?;靖拍睿侯?、對象、封裝、繼承、消息……三大特點(diǎn)封裝、繼承、多態(tài)4.1面向?qū)ο缶幊痰母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)4.1面向?qū)ο缶幊痰母拍?)封裝封裝就是把對象的屬性和和對這些屬性的操作封裝在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié),包含兩個(gè)含義:把對象的全部屬性和對屬性的全部操作結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單元(即對象)。信息隱蔽,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個(gè)邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。4.1面向?qū)ο缶幊痰母拍?)封裝4.1.1面向?qū)ο缶幊痰母拍?)繼承繼承是一種由已有的類創(chuàng)建新類的機(jī)制.利用繼承,我們可以先創(chuàng)建一個(gè)擁有共有屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的新類。新類繼承一般類的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。由繼承而得到的類稱為子類,被繼承的類稱為父類或超類。Java不支持多重繼承,子類只能有一個(gè)父類。4.1.1面向?qū)ο缶幊痰母拍?)繼承4.1.1面向?qū)ο缶幊痰母拍?)多態(tài)對象的多態(tài)是由封裝和繼承引出的面向?qū)ο蟪绦蛟O(shè)計(jì)語言的另一特征。多態(tài)主要體現(xiàn)在兩個(gè)方面:方法重載時(shí)實(shí)現(xiàn)的靜態(tài)多態(tài)和方法重寫時(shí)實(shí)現(xiàn)的動態(tài)多態(tài)。4.1.1面向?qū)ο缶幊痰母拍?)多態(tài)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.2.1類聲明4.2.2類體4.2.3實(shí)例化對象4.2.4構(gòu)造方法說明4.2.5對象的清除4.2.6方法重載4.2類的定義4.2.1類聲明4.2.1類聲明類聲明的格式如下:

[修飾符]class類名[extends父類名][implements接口名列表]{……}修飾符可能的選項(xiàng)有:[public][abstract|final]

public(公共):public修飾的類能被所有的類訪問。

abstract(抽象):abstract修飾的類不能被實(shí)例化,它包含有未實(shí)現(xiàn)的方法。

final(最終):final修飾的類不能被繼承,即不能有子類。注意:abstract和final不能同時(shí)作為一個(gè)類的修飾符。

當(dāng)一個(gè)類有多個(gè)修飾符時(shí),這些修飾符無先后順序之分。4.2.1類聲明類聲明的格式如下:4.2.1類聲明extends(繼承):

extends保留字用來表明新創(chuàng)建的類繼承哪個(gè)類,被繼承的類稱為此類的父類。extends后面只能跟一個(gè)父類名。implements(實(shí)現(xiàn)):用來表明這個(gè)類實(shí)現(xiàn)了哪些接口,接口名可以有多個(gè)。

例如:下面的類是合法的:classMyClass{//空類,沒有任何用處,但是合法

}又如:下面的Rectangle類繼承了Shapes父類,實(shí)現(xiàn)了接口Display,是一個(gè)公共類。publicclassRectangle

extendsShapesimplementDisplay{……//類體}4.2.1類聲明extends(繼承):4.2.2類體類體中定義了該類所有的成員變量和該類所支持的方法,其格式說明如下:{[成員變量說明][成員方法說明]}4.2.2類體類體中定義了該類所有的成員變量和該類所支持的4.2.2類體1.成員變量說明

成員變量又稱值域。成員變量定義在類中,是類成員的一部分,整個(gè)類都可以訪問它。Java中成員變量說明形式如下:[修飾符]成員變量類型成員變量名列表;例如:privateintnumber;成員變量的修飾符有以下幾種:缺省訪問修飾符、public、protected、private、final、static、transient和volatile。關(guān)于這些修飾符的含義以后將講到。4.2.2類體1.成員變量說明4.2.2類體2.成員變量使用(1)類的成員變量在定義它的類內(nèi)部,可以直接通過成員變量名來訪問。類成員變量類變量(用static修飾)實(shí)例變量(2)從類的外部訪問,類變量和實(shí)例變量的使用方法是不同。訪問類變量的格式:類名.類變量名訪問實(shí)例變量的格式如下:對象名.實(shí)例變量名

4.2.2類體2.成員變量使用classCircle{staticfinalfloatPI=3.1415926f;//常量

privatePointcenter;//privatefloatradius;//實(shí)例變量

staticColorcolor;//類變量

publicfloatarea;floatgetArea(){//實(shí)例方法

area=radius*radius*PI;returnarea;//內(nèi)部訪問成員變量

}}訪問:Circlec1=newCircle();//c1是對象名System.out.println(“area=”+c1.area);System.out.println(“Color=”+Circle.color);

classCircle{4.2.2類體3、成員方法說明Java通過類的方法,改變對象的狀態(tài)。方法說明分為方法首部說明和方法體兩部分。方法首部說明的格式如下:[方法修飾符]返回值類型方法名([形參列表])[throws異常列表]

方法修飾符可能的選項(xiàng)有:[public|protected|private][static][final|abstract][native][synchronized]4.方法體方法體是實(shí)現(xiàn)這個(gè)方法的代碼段,它由“{”和“}”括起來的語句序列構(gòu)成。4.2.2類體3、成員方法說明4.2.2類體5.方法的調(diào)用成員方法又分為類方法(靜態(tài)方法)和對象方法(實(shí)例方法)兩類。類方法調(diào)用形式如下:

類名.類方法名(實(shí)參列表)對象方法調(diào)用形式如下:對象名.對象方法名(實(shí)參列表)4.2.2類體5.方法的調(diào)用4.2.3實(shí)例化對象通過聲明和定義類,只是給出了創(chuàng)建對象的模板.當(dāng)使用一個(gè)類創(chuàng)建了一個(gè)對象時(shí),我們也說我們給出了這個(gè)類的一個(gè)實(shí)例。通常的格式為:TypeobjectName=newType([parameterList]);創(chuàng)建一個(gè)對象包括對象的聲明、為對象分配內(nèi)存空間和賦初值三個(gè)步驟。1、對象的聲明格式為:類的名字對象名字2、為聲明的對象分配內(nèi)存.使用new運(yùn)算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存3、執(zhí)行構(gòu)造方法,進(jìn)行初始化。4.2.3實(shí)例化對象通過聲明和定義類,只是給出了創(chuàng)建對象的4.2.3實(shí)例化對象【例4-1】下面的例子將建立雇員信息類EmpInfo,并實(shí)例化對象,然后打印出若干信息。//EmpInfo.javapublicclassEmpInfo{Stringname;//雇員的姓名

Stringdesignation;//雇員的職務(wù)

Stringdepartment;//雇員的部門

voidprint(){//成員方法

System.out.println(name+"is"+designation+"at"+department);}

4.2.3實(shí)例化對象【例4-1】下面的例子將建立雇員信息類4.2.3實(shí)例化對象

publicstaticvoidmain(Stringargs[]){EmpInfoemployee=newEmpInfo();//創(chuàng)建對象并實(shí)例化

="RobertJavaman";//給成員變量賦值

employee.designation="Manager";//給成員變量賦值

employee.department="CoffeeShop";//給成員變量賦值

employee.print();//調(diào)用方法print()}}運(yùn)行結(jié)果如下:RobertJavamanisManageratCoffeeShop4.2.3實(shí)例化對象publicstaticvoid4.2.4構(gòu)造方法每當(dāng)由類構(gòu)造對象時(shí)都要調(diào)用該類特定的構(gòu)造方法,在Java中,每個(gè)類都至少有一個(gè)構(gòu)造方法。構(gòu)造方法可以確保用戶正確地構(gòu)造類的對象,同時(shí),構(gòu)造方法也會對對象作初始化工作。構(gòu)造方法說明形式如下:

[構(gòu)造方法修飾符]方法名([形式參數(shù)列表])

[throws異常列表]{方法體}構(gòu)造方法修飾符與一般方法修飾符相同一個(gè)類的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類名。編譯器根據(jù)參數(shù)的類型來決定調(diào)用哪個(gè)構(gòu)造方法。這就是構(gòu)造方法的多態(tài)。4.2.4構(gòu)造方法每當(dāng)由類構(gòu)造對象時(shí)都要調(diào)用該類特定的構(gòu)造方4.2.4構(gòu)造方法構(gòu)造方法分為:缺省的構(gòu)造方法、帶參數(shù)的構(gòu)造方法。

(1)缺省的構(gòu)造方法如果類的定義沒有編寫構(gòu)造方法,Java語言會自動為用戶提供。這個(gè)由Java自動提供的構(gòu)造方法就是所謂的缺省構(gòu)造方法。缺省的構(gòu)造方法確保每個(gè)Java類都至少有一個(gè)構(gòu)造方法,該方法應(yīng)符合方法的定義。(2)帶參數(shù)的構(gòu)造方法帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)造一個(gè)新對象時(shí),類構(gòu)造方法可以按需要將一些指定的參數(shù)傳遞給對象的變量。4.2.4構(gòu)造方法構(gòu)造方法分為:缺省的構(gòu)造方法、帶參數(shù)的構(gòu)造4.2.5對象的清除通過垃圾收集器周期性地釋放無用對象所使用的內(nèi)存,完成對象的清除。垃圾收集器作為一個(gè)線程運(yùn)行,當(dāng)系統(tǒng)的內(nèi)存用盡或程序中調(diào)用System.gc()要求進(jìn)行垃圾收集時(shí),垃圾收集線程與系統(tǒng)同步運(yùn)行,否則垃圾收集器在系統(tǒng)空閑時(shí)異步地執(zhí)行。在對象作為垃圾被收集器釋放前,Java運(yùn)行時(shí)系統(tǒng)會自動調(diào)用對象的方法finialize()。protectedvoidfinalize()throwsThrowable{//撤銷對象}finalize()方法是類java.lang.Object中最基本的方法。4.2.5對象的清除通過垃圾收集器周期性地釋放無用對象所使4.2.6方法重載

方法重載(MethodOverloading)就是一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同:即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。從另外的含義上來講,重載也可以看成是同一個(gè)方法具有不同的版本,每個(gè)版本之間在參數(shù)特征和返回值方面有差別。重載是Java實(shí)現(xiàn)多態(tài)性的一種方式。當(dāng)調(diào)用一個(gè)重載方法時(shí),JVM自動根據(jù)當(dāng)前對方法的調(diào)用形式在類的定義中匹配形式符合的成員方法,匹配成功后,執(zhí)行參數(shù)類型、數(shù)量均相同的成員方法。方法重載在Java的API類庫中得到大量的使用。4.2.6方法重載方法重載(MethodOver第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.4包package4.4.1package語句4.4.2import語句4.4.3編譯和運(yùn)行包4.4包package4.4.1package語句4.4包package由于Java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間。包實(shí)際上提供了一種命名機(jī)制和可見性限制機(jī)制。package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。Java系統(tǒng)必須支持至少一個(gè)無名包(缺省包),一般為當(dāng)前目錄。在開發(fā)小的或者臨時(shí)的應(yīng)用程序或者剛剛開始開發(fā)時(shí),用無名包是非常方便的。4.4包package由于Java編譯器為每個(gè)類生成一個(gè)字4.4.1package語句package語句的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對應(yīng)于文件系統(tǒng)的目錄。例如:名為myPackage的包中,所有類文件都將存儲在目錄myPackage下。同時(shí),package語句中,用“.”來指明目錄的層次,例如:

packagejava.awt.image;

package;packagemyPackage;4.4.1package語句package語句的格式為:4.4.2import語句

為了能使用Java中已提供的類,我們需要用import語句來引入所需要的類。其格式為

importpackage1[.package2…].(classname|*);import語句其中package1[.package2…]表明包的層次,與package語句相同,它對應(yīng)于文件目錄,classname則指明所要引入的類,如果要從一個(gè)包中引入多個(gè)類,則可以用星號(*)來代替。例如:

importjava.util.Date;

importjava.util.*;

importjavax.swing.event.*;4.4.2import語句為了能使用Java中已4.4.3編譯和運(yùn)行包在JDK中編譯以下程序:packagep1; publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){ System.out.println(“HelloWorld!”);}}4.4.3編譯和運(yùn)行包在JDK中編譯以下程序:4.4.3編譯和運(yùn)行包帶包編譯:javac–d.HelloWorldApp.java帶包運(yùn)行:javap1.HelloWorldApp4.4.3編譯和運(yùn)行包帶包編譯:第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.5成員變量及方法的訪問權(quán)限

在Java中,對于成員變量和成員方法可以選擇四種訪問方式:public、private、protected和缺省.4.5成員變量及方法的訪問權(quán)限在Java中,對于成員變量4.5成員變量及方法的訪問權(quán)限公共類型(public)如果聲明一個(gè)成員變量或成員方法的訪問類型為public,則位于不同包中的類都可以訪問公共類型的成員變量。保護(hù)類型(protected)聲明為protected訪問類型的成員變量或成員方法,只能夠被該類內(nèi)部、子類和相同包中的類訪問。缺省類型如果成員變量或成員方法為缺省類型,則能夠被該類內(nèi)部和相同包中的類訪問。私有類型(private)如果一個(gè)變量或成員聲明為私有類型,則該變量或方法只能在同一類中被訪問。4.5成員變量及方法的訪問權(quán)限公共類型(public)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.6final、this及其它4.6.1final關(guān)鍵字4.6.2this、super、null關(guān)鍵字4.6.5java.lang.Object類4.6.4JAR文件的使用4.6final、this及其它4.6.1fina4.6.1final關(guān)鍵字1)final修飾成員變量如果一個(gè)成員變量前面有final修飾,那么這個(gè)成員變量就變成了常量,一經(jīng)賦值,就不允許在程序的其他地方修改。2)final修飾方法方法的final修飾符表明方法不能被子類覆蓋。帶有final修飾符的方法稱為最終方法。3)final類final類不能被繼承。4.6.1final關(guān)鍵字1)final修飾成員變量4.6.2this、super、null關(guān)鍵字this是用來指向當(dāng)前對象或類實(shí)例的。例如:classDemothis{ inta;//成員變量

publicDemothis(inta) { this.a=a; } }super關(guān)鍵字指明是對父類的引用。super.variable;super.method([para_list]);super([para_list])null表示類或者變量是空,不代表任何對象或?qū)嵗?.6.2this、super、null關(guān)鍵字this是4.6.3java.lang.Object類類java.lang.Object處于java開發(fā)環(huán)境的類層次的根部,其它所有的類都是直接或間接地繼承了此類。該類定義了一些最基本的狀態(tài)和行為。4.6.3java.lang.Object類類java.l4.6.4JAR文件的使用JAR文件就是JavaArchiveFile,是Java的一種文檔格式。包含了一個(gè)META-INF/MANIFEST.MF文件。使用jar.exe把一些文件壓縮成一個(gè)JAR文件,來發(fā)布我們的應(yīng)用程序。4.6.4JAR文件的使用JAR文件就是JavaAr4.6.4JAR文件的使用JAR文件的制作步驟如下:假設(shè)應(yīng)用程序中有兩個(gè)類A、B,其中A類是主類(其中包含了main()方法).1)首先用文本編輯器比如Windows下的記事本編寫一個(gè)清單文件//Mymoon.mfManifest-Version:1.0Main-Class:ACreated-By:1.2.2(SunMicrosystemsInc.)比如,保存Mymoon.mf到D:\user\chap04.需要注意的是在編寫清單文件時(shí),在”Manifest-Version”和“1.0”之間,”Main-Class”和主類”A”之間,以及”Created-By”和”1.2.2”之間必須有且只有一個(gè)空格.4.6.4JAR文件的使用JAR文件的制作步驟如下:4.6.4JAR文件的使用2)生成JAR文件D:\user\chap04>jarcfmTom.jarMymoon.mfA.classB.class其中:c——表示要生成一個(gè)新的JAR文件f——表示要生成的JAR文件的名字m——表示文件清單文件的名字。我們在發(fā)布我們的軟件時(shí),還可以再寫一個(gè)有如下內(nèi)容的bat文件Tom.batTom.bat文件中內(nèi)容如下:java-jarTom.jar4.6.4JAR文件的使用2)生成JAR文件4.6.4JAR文件的使用

我們還可以將這個(gè)jar文件存放到Java運(yùn)行環(huán)境的擴(kuò)展類目錄下,即將該jar文件存放在JDK安裝目錄的jre\lib\ext文件夾中.這樣,其他的程序就可以使用這個(gè)jar文件中的類來創(chuàng)建對象了。有關(guān)jar.exe的詳細(xì)使用方法詳見JDK幫助文檔。4.6.4JAR文件的使用我們還可以將這個(gè)jar第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)主要內(nèi)容4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它主要內(nèi)容4.1面向?qū)ο蟮幕靖拍?.1面向?qū)ο缶幊痰母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)基本思想:將數(shù)據(jù)以及對于這些數(shù)據(jù)的操作,封裝在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中。所有的對象都同時(shí)擁有屬性以及與這些屬性相關(guān)的行為。對象之間的聯(lián)系是通過消息來實(shí)現(xiàn)的?;靖拍睿侯?、對象、封裝、繼承、消息……三大特點(diǎn)封裝、繼承、多態(tài)4.1面向?qū)ο缶幊痰母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)4.1面向?qū)ο缶幊痰母拍?)封裝封裝就是把對象的屬性和和對這些屬性的操作封裝在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié),包含兩個(gè)含義:把對象的全部屬性和對屬性的全部操作結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單元(即對象)。信息隱蔽,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個(gè)邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。4.1面向?qū)ο缶幊痰母拍?)封裝4.1.1面向?qū)ο缶幊痰母拍?)繼承繼承是一種由已有的類創(chuàng)建新類的機(jī)制.利用繼承,我們可以先創(chuàng)建一個(gè)擁有共有屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的新類。新類繼承一般類的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。由繼承而得到的類稱為子類,被繼承的類稱為父類或超類。Java不支持多重繼承,子類只能有一個(gè)父類。4.1.1面向?qū)ο缶幊痰母拍?)繼承4.1.1面向?qū)ο缶幊痰母拍?)多態(tài)對象的多態(tài)是由封裝和繼承引出的面向?qū)ο蟪绦蛟O(shè)計(jì)語言的另一特征。多態(tài)主要體現(xiàn)在兩個(gè)方面:方法重載時(shí)實(shí)現(xiàn)的靜態(tài)多態(tài)和方法重寫時(shí)實(shí)現(xiàn)的動態(tài)多態(tài)。4.1.1面向?qū)ο缶幊痰母拍?)多態(tài)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.2.1類聲明4.2.2類體4.2.3實(shí)例化對象4.2.4構(gòu)造方法說明4.2.5對象的清除4.2.6方法重載4.2類的定義4.2.1類聲明4.2.1類聲明類聲明的格式如下:

[修飾符]class類名[extends父類名][implements接口名列表]{……}修飾符可能的選項(xiàng)有:[public][abstract|final]

public(公共):public修飾的類能被所有的類訪問。

abstract(抽象):abstract修飾的類不能被實(shí)例化,它包含有未實(shí)現(xiàn)的方法。

final(最終):final修飾的類不能被繼承,即不能有子類。注意:abstract和final不能同時(shí)作為一個(gè)類的修飾符。

當(dāng)一個(gè)類有多個(gè)修飾符時(shí),這些修飾符無先后順序之分。4.2.1類聲明類聲明的格式如下:4.2.1類聲明extends(繼承):

extends保留字用來表明新創(chuàng)建的類繼承哪個(gè)類,被繼承的類稱為此類的父類。extends后面只能跟一個(gè)父類名。implements(實(shí)現(xiàn)):用來表明這個(gè)類實(shí)現(xiàn)了哪些接口,接口名可以有多個(gè)。

例如:下面的類是合法的:classMyClass{//空類,沒有任何用處,但是合法

}又如:下面的Rectangle類繼承了Shapes父類,實(shí)現(xiàn)了接口Display,是一個(gè)公共類。publicclassRectangle

extendsShapesimplementDisplay{……//類體}4.2.1類聲明extends(繼承):4.2.2類體類體中定義了該類所有的成員變量和該類所支持的方法,其格式說明如下:{[成員變量說明][成員方法說明]}4.2.2類體類體中定義了該類所有的成員變量和該類所支持的4.2.2類體1.成員變量說明

成員變量又稱值域。成員變量定義在類中,是類成員的一部分,整個(gè)類都可以訪問它。Java中成員變量說明形式如下:[修飾符]成員變量類型成員變量名列表;例如:privateintnumber;成員變量的修飾符有以下幾種:缺省訪問修飾符、public、protected、private、final、static、transient和volatile。關(guān)于這些修飾符的含義以后將講到。4.2.2類體1.成員變量說明4.2.2類體2.成員變量使用(1)類的成員變量在定義它的類內(nèi)部,可以直接通過成員變量名來訪問。類成員變量類變量(用static修飾)實(shí)例變量(2)從類的外部訪問,類變量和實(shí)例變量的使用方法是不同。訪問類變量的格式:類名.類變量名訪問實(shí)例變量的格式如下:對象名.實(shí)例變量名

4.2.2類體2.成員變量使用classCircle{staticfinalfloatPI=3.1415926f;//常量

privatePointcenter;//privatefloatradius;//實(shí)例變量

staticColorcolor;//類變量

publicfloatarea;floatgetArea(){//實(shí)例方法

area=radius*radius*PI;returnarea;//內(nèi)部訪問成員變量

}}訪問:Circlec1=newCircle();//c1是對象名System.out.println(“area=”+c1.area);System.out.println(“Color=”+Circle.color);

classCircle{4.2.2類體3、成員方法說明Java通過類的方法,改變對象的狀態(tài)。方法說明分為方法首部說明和方法體兩部分。方法首部說明的格式如下:[方法修飾符]返回值類型方法名([形參列表])[throws異常列表]

方法修飾符可能的選項(xiàng)有:[public|protected|private][static][final|abstract][native][synchronized]4.方法體方法體是實(shí)現(xiàn)這個(gè)方法的代碼段,它由“{”和“}”括起來的語句序列構(gòu)成。4.2.2類體3、成員方法說明4.2.2類體5.方法的調(diào)用成員方法又分為類方法(靜態(tài)方法)和對象方法(實(shí)例方法)兩類。類方法調(diào)用形式如下:

類名.類方法名(實(shí)參列表)對象方法調(diào)用形式如下:對象名.對象方法名(實(shí)參列表)4.2.2類體5.方法的調(diào)用4.2.3實(shí)例化對象通過聲明和定義類,只是給出了創(chuàng)建對象的模板.當(dāng)使用一個(gè)類創(chuàng)建了一個(gè)對象時(shí),我們也說我們給出了這個(gè)類的一個(gè)實(shí)例。通常的格式為:TypeobjectName=newType([parameterList]);創(chuàng)建一個(gè)對象包括對象的聲明、為對象分配內(nèi)存空間和賦初值三個(gè)步驟。1、對象的聲明格式為:類的名字對象名字2、為聲明的對象分配內(nèi)存.使用new運(yùn)算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存3、執(zhí)行構(gòu)造方法,進(jìn)行初始化。4.2.3實(shí)例化對象通過聲明和定義類,只是給出了創(chuàng)建對象的4.2.3實(shí)例化對象【例4-1】下面的例子將建立雇員信息類EmpInfo,并實(shí)例化對象,然后打印出若干信息。//EmpInfo.javapublicclassEmpInfo{Stringname;//雇員的姓名

Stringdesignation;//雇員的職務(wù)

Stringdepartment;//雇員的部門

voidprint(){//成員方法

System.out.println(name+"is"+designation+"at"+department);}

4.2.3實(shí)例化對象【例4-1】下面的例子將建立雇員信息類4.2.3實(shí)例化對象

publicstaticvoidmain(Stringargs[]){EmpInfoemployee=newEmpInfo();//創(chuàng)建對象并實(shí)例化

="RobertJavaman";//給成員變量賦值

employee.designation="Manager";//給成員變量賦值

employee.department="CoffeeShop";//給成員變量賦值

employee.print();//調(diào)用方法print()}}運(yùn)行結(jié)果如下:RobertJavamanisManageratCoffeeShop4.2.3實(shí)例化對象publicstaticvoid4.2.4構(gòu)造方法每當(dāng)由類構(gòu)造對象時(shí)都要調(diào)用該類特定的構(gòu)造方法,在Java中,每個(gè)類都至少有一個(gè)構(gòu)造方法。構(gòu)造方法可以確保用戶正確地構(gòu)造類的對象,同時(shí),構(gòu)造方法也會對對象作初始化工作。構(gòu)造方法說明形式如下:

[構(gòu)造方法修飾符]方法名([形式參數(shù)列表])

[throws異常列表]{方法體}構(gòu)造方法修飾符與一般方法修飾符相同一個(gè)類的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類名。編譯器根據(jù)參數(shù)的類型來決定調(diào)用哪個(gè)構(gòu)造方法。這就是構(gòu)造方法的多態(tài)。4.2.4構(gòu)造方法每當(dāng)由類構(gòu)造對象時(shí)都要調(diào)用該類特定的構(gòu)造方4.2.4構(gòu)造方法構(gòu)造方法分為:缺省的構(gòu)造方法、帶參數(shù)的構(gòu)造方法。

(1)缺省的構(gòu)造方法如果類的定義沒有編寫構(gòu)造方法,Java語言會自動為用戶提供。這個(gè)由Java自動提供的構(gòu)造方法就是所謂的缺省構(gòu)造方法。缺省的構(gòu)造方法確保每個(gè)Java類都至少有一個(gè)構(gòu)造方法,該方法應(yīng)符合方法的定義。(2)帶參數(shù)的構(gòu)造方法帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)造一個(gè)新對象時(shí),類構(gòu)造方法可以按需要將一些指定的參數(shù)傳遞給對象的變量。4.2.4構(gòu)造方法構(gòu)造方法分為:缺省的構(gòu)造方法、帶參數(shù)的構(gòu)造4.2.5對象的清除通過垃圾收集器周期性地釋放無用對象所使用的內(nèi)存,完成對象的清除。垃圾收集器作為一個(gè)線程運(yùn)行,當(dāng)系統(tǒng)的內(nèi)存用盡或程序中調(diào)用System.gc()要求進(jìn)行垃圾收集時(shí),垃圾收集線程與系統(tǒng)同步運(yùn)行,否則垃圾收集器在系統(tǒng)空閑時(shí)異步地執(zhí)行。在對象作為垃圾被收集器釋放前,Java運(yùn)行時(shí)系統(tǒng)會自動調(diào)用對象的方法finialize()。protectedvoidfinalize()throwsThrowable{//撤銷對象}finalize()方法是類java.lang.Object中最基本的方法。4.2.5對象的清除通過垃圾收集器周期性地釋放無用對象所使4.2.6方法重載

方法重載(MethodOverloading)就是一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同:即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。從另外的含義上來講,重載也可以看成是同一個(gè)方法具有不同的版本,每個(gè)版本之間在參數(shù)特征和返回值方面有差別。重載是Java實(shí)現(xiàn)多態(tài)性的一種方式。當(dāng)調(diào)用一個(gè)重載方法時(shí),JVM自動根據(jù)當(dāng)前對方法的調(diào)用形式在類的定義中匹配形式符合的成員方法,匹配成功后,執(zhí)行參數(shù)類型、數(shù)量均相同的成員方法。方法重載在Java的API類庫中得到大量的使用。4.2.6方法重載方法重載(MethodOver第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.4包package4.4.1package語句4.4.2import語句4.4.3編譯和運(yùn)行包4.4包package4.4.1package語句4.4包package由于Java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間。包實(shí)際上提供了一種命名機(jī)制和可見性限制機(jī)制。package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。Java系統(tǒng)必須支持至少一個(gè)無名包(缺省包),一般為當(dāng)前目錄。在開發(fā)小的或者臨時(shí)的應(yīng)用程序或者剛剛開始開發(fā)時(shí),用無名包是非常方便的。4.4包package由于Java編譯器為每個(gè)類生成一個(gè)字4.4.1package語句package語句的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對應(yīng)于文件系統(tǒng)的目錄。例如:名為myPackage的包中,所有類文件都將存儲在目錄myPackage下。同時(shí),package語句中,用“.”來指明目錄的層次,例如:

packagejava.awt.image;

package;packagemyPackage;4.4.1package語句package語句的格式為:4.4.2import語句

為了能使用Java中已提供的類,我們需要用import語句來引入所需要的類。其格式為

importpackage1[.package2…].(classname|*);import語句其中package1[.package2…]表明包的層次,與package語句相同,它對應(yīng)于文件目錄,classname則指明所要引入的類,如果要從一個(gè)包中引入多個(gè)類,則可以用星號(*)來代替。例如:

importjava.util.Date;

importjava.util.*;

importjavax.swing.event.*;4.4.2import語句為了能使用Java中已4.4.3編譯和運(yùn)行包在JDK中編譯以下程序:packagep1; publicclassHelloWorldApp{publicstaticvoidmain(Stringargs[]){ System.out.println(“HelloWorld!”);}}4.4.3編譯和運(yùn)行包在JDK中編譯以下程序:4.4.3編譯和運(yùn)行包帶包編譯:javac–d.HelloWorldApp.java帶包運(yùn)行:javap1.HelloWorldApp4.4.3編譯和運(yùn)行包帶包編譯:第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.5成員變量及方法的訪問權(quán)限4.6final、this及其它第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.5成員變量及方法的訪問權(quán)限

在Java中,對于成員變量和成員方法可以選擇四種訪問方式:public、private、protected和缺省.4.5成員變量及方法的訪問權(quán)限在Java中,對于成員變量4.5成員變量及方法的訪問權(quán)限公共類型(public)如果聲明一個(gè)成員變量或成員方法的訪問類型為public,則位于不同包中的類都可以訪問公共類型的成員變量。保護(hù)類型(protected)聲明為protected訪問類型的成員變量或成員方法,只能夠被該類內(nèi)部、子類和相同包中的類訪問。缺省類型如果成員變量或成員方法為缺省類型,則能夠被該類內(nèi)部和相同包中的類訪問。私有類型(private)如果一個(gè)變量或成員聲明為私有類型,則該變量或方法只能在同一類中被訪問。4.5成員變量及方法的訪問權(quán)限公共類型(public)第4章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)4.1面向?qū)ο蟮幕靖拍?.2類的定義4.3類和對象的使用4.4包package4.

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論