Java程序設(shè)計(jì)-第4章課件_第1頁
Java程序設(shè)計(jì)-第4章課件_第2頁
Java程序設(shè)計(jì)-第4章課件_第3頁
Java程序設(shè)計(jì)-第4章課件_第4頁
Java程序設(shè)計(jì)-第4章課件_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章面向?qū)ο螅ㄉ希?/p>

第四章面向?qū)ο螅ㄉ希?什么是抽象類與對(duì)象及其關(guān)系類中定義的屬性(域)與方法(操作)對(duì)象構(gòu)造方法類成員屬性和方法的其它修飾符包(Package)

主要內(nèi)容什么是抽象主要內(nèi)容2什么是抽象什么是抽象3抽象的定義抽象(abstraction)是從被研究對(duì)象中舍棄個(gè)別的、非本質(zhì)的、或與研究主旨無關(guān)的次要特征,而抽取與研究有關(guān)的共性內(nèi)容加以考察,形成對(duì)研究問題正確的簡(jiǎn)明扼要的認(rèn)識(shí)。動(dòng)物經(jīng)過人類抽象用一個(gè)叫”動(dòng)物”的類來概括抽象的定義抽象(abstraction)是從被研究對(duì)象中舍棄4類與對(duì)象及其關(guān)系

類與對(duì)象及其關(guān)系5類與對(duì)象及其關(guān)系對(duì)象是對(duì)客觀事物的抽象。類是對(duì)對(duì)象的抽象,在語言中是一種抽象的數(shù)據(jù)類型。類的定義在Java中可簡(jiǎn)述為

class類名{}它們的關(guān)系是,對(duì)象是類的實(shí)例,類是對(duì)象的模板。

類與對(duì)象及其關(guān)系對(duì)象是對(duì)客觀事物的抽象。6類中定義的屬性與方法

類中定義的屬性與方法7類中定義的屬性(域)與方法(操作)類和對(duì)象都有屬性和操作,屬性是事物靜態(tài)特征的抽象,操作是事物動(dòng)態(tài)特征的抽象。如【例4.1】classFighterPlane{Stringname;intmissileNum;voidfire(){if(missileNum>0){missileNum-=1;System.out.println(“nowfireamissile!”);}else{System.out.println(“Nomissileleft!”);}}}類的屬性或稱為“域”類的方法類中定義的屬性(域)與方法(操作)類和對(duì)象都有屬性和操作,8類中的域變量和方法存在以下關(guān)系類中定義的域變量可以被類中所有的方法所訪問。方法中的形式參數(shù)和定義的局部變量的作用域僅限于方法,局部變量在使用前必須進(jìn)行賦值初始化。如果局部變量和類中的屬性變量重名,則在方法中對(duì)同名變量改變的是局部變量。類中定義的方法可以進(jìn)行遞歸調(diào)用【例4.2】類中的域變量和方法存在以下關(guān)系類中定義的域變量可以被類中所有9Java的類一個(gè)Java類形式上包含兩個(gè)部分:類首說明類體

Java的類一個(gè)Java類形式上包含兩個(gè)部分:10類首說明

類首說明的形式如下:

[修飾符]class類名[extends超類名][implements接口名列表]類的修飾符有private、public、abstract

、final。一個(gè)類可以同時(shí)有多個(gè)修飾符,但是不能有相同的修飾符。當(dāng)一個(gè)類有多個(gè)修飾符時(shí),這些修飾符無先后順序之分,可以任意的順序排列它們。注意:

abstract和final不能同時(shí)作為一個(gè)類的修飾符。private(私有):修飾的類只能被同一包名中的類訪問,這是Java默認(rèn)方式;public(公共):修飾的類能被所有的類訪問;abstract(抽象):修飾的類不能被實(shí)例化,它包含有未實(shí)現(xiàn)的方法。final(最終):修飾的類不能被繼承,即不能有子類。類名是所創(chuàng)建的類的名字,類名可以是任意的Java標(biāo)識(shí)符,根據(jù)Java命名的約定,類名的每個(gè)有意義的單詞的首字母要大寫,其余字母小寫。extends(繼承):保留字用來表明新創(chuàng)建的類繼承哪個(gè)類,被繼承的類稱為此類的超類。extends后面只能跟一個(gè)超類名稱。implements(實(shí)現(xiàn)):用來表明這個(gè)類實(shí)現(xiàn)了哪些接口,接口名可以有多個(gè)。

類首說明類首說明的形式如下:11類體

類體中定義了該類所有的成員變量和該類所支持的方法,其形式說明如下:類體{[成員變量說明][構(gòu)造方法說明][靜態(tài)初始化說明][方法說明]}類體由成員變量說明、構(gòu)造方法說明、靜態(tài)初始化說明和方法說明構(gòu)成,它們都是可選的。類體中的這四種說明沒有先后順序之分,但是為了類的可讀性,建議按照上面出現(xiàn)的順序說明。類體類體中定義了該類所有的成員變量和該類所支持的方法,其形12成員變量說明及其使用1.成員變量說明成員變量的說明類似于方法的局部變量說明,所不同的是,成員變量定義在類中,是類成員的一部分,整個(gè)類都可以訪問它。Java中成員變量說明形式如下:[修飾符]成員變量類型成員變量名列表;

成員變量的修飾符有以下幾種:缺省訪問修飾符、public、protected、private、final、static、transient和volatile。成員變量說明及其使用1.成員變量說明13(1)缺省訪問修飾符

缺省訪問修飾符的成員變量可以被同一包(package)中的任何類訪問。(2)public(公共)

public修飾的成員變量可以被項(xiàng)目文件中的任何方法所訪問。由于public成員變量不受限制,這易使類的對(duì)象引起不希望的修改,建議成員變量盡量不要使用public修飾符。(3)protected(受保護(hù))

protected修飾的成員變量可以被有繼承關(guān)系的類自由訪問,即子類可以訪問它。(4)private(私有)

private修飾的成員變量只能在同一個(gè)類中使用。這種方式通常是最為安全的。(5)static(靜態(tài)):(類變量)

static修飾的成員變量又稱為類變量。不加static修飾的成員變量又叫對(duì)象變量。對(duì)象變量依附于具體的對(duì)象實(shí)例,它的值因具體對(duì)象實(shí)例的不同而不同,而類變量為該類的所有對(duì)象共享,它的值不因類的對(duì)象不同而不同。(6)final(最終):(常量)final修飾的成員變量叫最終成員變量。一開始創(chuàng)建該變量時(shí)將其設(shè)定了一個(gè)值,在以后程序的運(yùn)行過程當(dāng)中,變量的值將一直保持這個(gè)值不變。最終變量又稱為常量。Java中的常量必須是類的成員。對(duì)于最終成員變量,任何賦值都將導(dǎo)致編譯錯(cuò)誤。因?yàn)槌A吭谡f明以后就不能改變其值,所以常量必須要使用變量初始化來賦初值。無論是實(shí)例變量,還是類變量,都可以被說明成常量。final修飾符和static修飾符并不沖突。成員變量類型可以是基本類型或類。成員變量名使用符合Java規(guī)定的標(biāo)識(shí)符來表示。(1)缺省訪問修飾符14成員變量使用

類的成員變量在定義它的類內(nèi)部,直接通過成員變量名來訪問。如從類的外部訪問,類變量和類對(duì)象變量的使用方法是不同。使用類變量的格式如下:

類名.類變量名由此可見,訪問類變量與類的對(duì)象構(gòu)造和對(duì)象都無關(guān)。訪問類對(duì)象變量的格式如下:類對(duì)象名.類對(duì)象變量名由此可見,要使用對(duì)象變量首先要構(gòu)造對(duì)象,獲得類對(duì)象名。類對(duì)象名即對(duì)應(yīng)的類變量名。成員變量使用類的成員變量在定義它的類內(nèi)部,直接通過成員變量15例4-1成員變量的訪問classPoint{finalstaticPointorigin=newPoint(0,0);//定義一個(gè)類變量,常量,origin為坐標(biāo)原點(diǎn)intx;inty;Point(intx,inty){thisx=x;this.y=y;}}publicclassUsingStatic{publicstaticvoidmain(Stringargs[]){Pointp1=Point(10,20);//構(gòu)造類Point的對(duì)象p1Pointp2=Point(310,120);System.out.println(″類Point中的類變量:″);System.out.println(″(″+Point.origin.x+″,″+Point.origin.y+″)″);//訪問類變量(類名.類變量名)

System.out.println(″類Point中的類實(shí)例變量:″);System.out.println(″(″+p1.x+″,″+p1..y+″)″);//訪問類對(duì)象變量x、y,p1是類對(duì)象名(類對(duì)象名.類對(duì)象變量名)}}例4-1成員變量的訪問16迪米特法則LawofDemeter1987,NortheasternUniversity火星登陸軟件,木星歐羅巴衛(wèi)星軌道飛船軟件系統(tǒng)Don’ttalktostrangers迪米特法則LawofDemeter17對(duì)象對(duì)象18對(duì)象的產(chǎn)生NEW類對(duì)象對(duì)象的產(chǎn)生使用的代碼:newFighterPlane();對(duì)象的聲明使用的代碼:FighterPlanefp;對(duì)象的產(chǎn)生NEW類對(duì)象對(duì)象的產(chǎn)生使用的代碼:new19NEW類對(duì)象可以聲明后立即賦予對(duì)象:FighterPlanefp=newFighterPlane()NEW類對(duì)象可以聲明后立即賦予對(duì)象:FighterPlane20對(duì)象內(nèi)存空間分布當(dāng)“FighterPlanefp=newFighterPlane()”處于某個(gè)方法中時(shí):對(duì)象內(nèi)存空間分布當(dāng)“FighterPlanefp=n21對(duì)象作為參數(shù)的特點(diǎn)普通數(shù)據(jù)類型作為參數(shù)傳遞是值傳遞,【例4.3】。對(duì)象是引用傳遞。a對(duì)象s對(duì)象as【例4.4】【例4.5】對(duì)象作為參數(shù)的特點(diǎn)普通數(shù)據(jù)類型作為參數(shù)傳遞是值傳遞,【例422對(duì)象數(shù)組MyClass[]mc=newMyClass[10];數(shù)組對(duì)象特點(diǎn)及常用方法具有對(duì)象引用的特點(diǎn),例【4.6】屬性length的用法,例【4.7】對(duì)象數(shù)組MyClass[]mc=newMyClas23構(gòu)造方法構(gòu)造方法24構(gòu)造方法的含義,【例4.8】構(gòu)造方法的特征,【例4.9】、【4.10】構(gòu)造方法的注意事項(xiàng)finalize方法與垃圾回收

什么是垃圾對(duì)象?垃圾對(duì)象何時(shí)回收?垃圾對(duì)象回收時(shí)調(diào)用finalize方法。構(gòu)造方法的含義,【例4.8】構(gòu)造方法的特征,【例4.9】、25構(gòu)造方法說明

每當(dāng)由類構(gòu)造對(duì)象時(shí)都要調(diào)用該類特定的構(gòu)造方法,在Java中,每個(gè)類都至少有一個(gè)構(gòu)造方法。構(gòu)造方法可以確保用戶正確地構(gòu)造類的對(duì)象,同時(shí),構(gòu)造方法也會(huì)對(duì)對(duì)象作初始化工作。構(gòu)造方法說明形式如下:

[構(gòu)造方法修飾符]方法名([形式參數(shù)列表])[throws異常列表]方法體構(gòu)造方法修飾符與一般方法修飾符相同,讀者參見4.3.3小節(jié)。

構(gòu)造方法不能像一般的方法那樣被直接調(diào)用,它是在構(gòu)造類的實(shí)例的時(shí)候被Java編譯器自動(dòng)調(diào)用的。當(dāng)我們構(gòu)造一個(gè)類的實(shí)例的時(shí)候,編譯器主要完成以下三件事情:(1)為對(duì)象分配內(nèi)存空間;(2)初始化對(duì)象中的實(shí)例變量的值,初始值可以是缺省值,或者變量按指定的值初始化;(3)調(diào)用對(duì)象的構(gòu)造方法。一個(gè)類的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類名。編譯器根據(jù)參數(shù)的類型來決定調(diào)用哪個(gè)構(gòu)造方法。構(gòu)造方法分為缺省的構(gòu)造方法(不帶參數(shù))和帶參數(shù)的構(gòu)造方法。構(gòu)造方法說明每當(dāng)由類構(gòu)造對(duì)象時(shí)都要調(diào)用該類特定的構(gòu)造方法,26缺省的構(gòu)造方法

如果類的定義沒有編制構(gòu)造方法,Java語言會(huì)自動(dòng)為用戶提供。這個(gè)由Java自動(dòng)提供的構(gòu)造方法就是所謂的缺省構(gòu)造方法。缺省的構(gòu)造方法確保每個(gè)Java類都至少有一個(gè)構(gòu)造方法,該方法應(yīng)符合類的定義。例如在例4-1的類Point中,如果我們沒有定義構(gòu)造方法,則Java自動(dòng)提供了一個(gè)缺省的構(gòu)造方法,如下:缺省的構(gòu)造方法:publicPoint(){};//對(duì)象成員變量的初值按Java規(guī)定

缺省的構(gòu)造方法如果類的定義沒有編制構(gòu)造方法,Java語言會(huì)27帶參數(shù)的構(gòu)造方法

帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)造一個(gè)新對(duì)象時(shí),類構(gòu)造方法可以按需要將一些指定的參數(shù)傳遞給構(gòu)造方法。如:publicPoint(intx,inty){this.x=x;this.y=y;}帶參數(shù)的構(gòu)造方法帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)28類成員屬性和方法的非訪問修飾符類成員屬性和方法的非訪問修飾符29方法說明

在Java中,方法總是Java類的一個(gè)組成部分。通過類的方法,改變對(duì)象的狀態(tài)。方法說明的格式如下:方法首部說明方法體方法說明分為方法首部說明和方法體兩部分。方法說明在Java中,方法總是Java類的一個(gè)組成部分。通30方法修飾符包括以下幾種:public修飾的方法可以由其他類訪問;protected修飾的方法只能由繼承關(guān)系的類訪問;private修飾的方法只能由說明該方法的類訪問;static修飾的方法為靜態(tài)方法,又叫類方法;無static修飾的方法為對(duì)象方法。類方法是該類的所有對(duì)象共享的方法。abstract修飾的方法為抽象方法,無其方法體;final修飾的方法為最終方法,不能由子類改變;synchronized(同步)修飾的方法執(zhí)行之前給方法設(shè)置同步機(jī)制,實(shí)現(xiàn)線程同步;native修飾的方法為本地方法,即方法實(shí)現(xiàn)與本機(jī)系統(tǒng)有關(guān)。方法修飾符包括以下幾種:31方法名是Java中任意的標(biāo)識(shí)符。按照命名的約定,方法名應(yīng)該是有意義的動(dòng)詞或動(dòng)詞短語,它的第一個(gè)字母一般要小寫,其他有意義的單詞的首字母要大寫,其余字母小寫。返回值類型可以是任意的Java類型,甚至可以是定義此方法的類。如果方法沒有返回值,則用void表示。形式參數(shù)列表是可選的。如果方法沒有形式參數(shù),就用一對(duì)小括號(hào)“()”表示。形式參數(shù)列表的形式如下:(類型形參名,類型形參名,……)throws異常列表規(guī)定了在方法執(zhí)行中可能導(dǎo)致的異常。第5章會(huì)詳細(xì)介紹。方法名是Java中任意的標(biāo)識(shí)符。按照命名的約定,方法名應(yīng)該是324.3.3.2方法體方法體是實(shí)現(xiàn)這個(gè)方法的代碼段,它由“{”和“}”括起來的語句序列構(gòu)成。方法體也可以是一個(gè)分號(hào)“;”,表示無方法體,該類沒有實(shí)現(xiàn)。當(dāng)且僅當(dāng)方法的修飾符中有abstract或native時(shí),方法才無方法體。4.3.3.2方法體33方法的調(diào)用類方法調(diào)用形式如下:類名.類靜態(tài)方法名(實(shí)參列表)對(duì)象方法調(diào)用形式如下:類對(duì)象名.類非靜態(tài)方法名(實(shí)參列表)前面的例子中經(jīng)常使用到類方法,應(yīng)用程序中的主方法main就是類方法。類方法和類變量一樣,都是對(duì)整個(gè)類而言的,而不是針對(duì)類的對(duì)象。一些通用的、公用型的方法不能直接作用在類的對(duì)象,因此常常被作為類方法實(shí)現(xiàn)。Java類庫中Math類,其中多數(shù)的數(shù)學(xué)運(yùn)算的操作都被定義成靜態(tài)方法。因此,一些通用的、公用型的方法可以使用類方法把它們放在合適的類中,從而很好地將它們組織起來。方法的調(diào)用類方法調(diào)用形式如下:34關(guān)于類方法的使用,有如下一些限制:(1)在類方法中不能引用對(duì)象變量。(2)在類方法中不能使用super、this關(guān)鍵字(super、this介紹見后)。(3)類方法不能調(diào)用類中的對(duì)象方法。如果違反這些限制,你的程序就會(huì)導(dǎo)致編譯錯(cuò)誤。與類方法相比,對(duì)象方法幾乎沒有什么限制:(1)對(duì)象方法可以引用對(duì)象變量(這是顯然的),也可以引用類變量(甚至一個(gè)對(duì)象變量都不引用)。(2)對(duì)象方法中可以使用supper、this關(guān)鍵字。(3)對(duì)象方法中可以調(diào)用類方法。如果包含類方法的類被繼承,那么其子類中既可以使用帶有超類名的限定名來訪問該類方法,也可以使用子類名的限定名來訪問該類方法。關(guān)于類方法的使用,有如下一些限制:35static用static修飾符修飾的數(shù)據(jù)成員是不屬于任何一個(gè)類的具體對(duì)象,而是屬于類的靜態(tài)數(shù)據(jù)成員。它被保存在類的內(nèi)存區(qū)的公共存儲(chǔ)單元中,而不是保存在某個(gè)對(duì)象的內(nèi)存區(qū)中。因此,一個(gè)類的任何對(duì)象訪問它時(shí),存取到的都是相同的數(shù)值。訪問方式為通過類名加點(diǎn)操作符來訪問,也可通過對(duì)象引用來訪問。static用static修飾符修飾的數(shù)據(jù)成員是不屬于任何36Static修飾的方法有如下特點(diǎn):static方法是類方法,但可以被所有對(duì)象所訪問,引用這個(gè)方法時(shí),可以使用對(duì)象名做前綴,也可以使用類名做前綴。static方法內(nèi)部的代碼,只能訪問類中的static屬性或方法,不能訪問類中的非static屬性或方法(因?yàn)槟鞘菍?duì)象方法),但非static方法(對(duì)象方法)可以訪問static數(shù)據(jù)成員。main方法是特殊的靜態(tài)方法,是Application程序入口點(diǎn),必須寫成publicstaticvoidmain(Stringargs[])的形式。Static修飾的方法有如下特點(diǎn):static方法是類方法,37finalfinal修飾屬性,則屬性為常量(全部大寫);

如果修飾方法,則方法稱為最終方法,在子類當(dāng)中不能被覆蓋,可防止任何繼承類修改此方法。

abstract與nativefinalfinal修飾屬性,則屬性為常量(全部大寫);38包(Package)包(Package)39包(Package)隨著Java的應(yīng)用,SUN公司的JDK,各系統(tǒng)開發(fā)商,以及自己開發(fā)的類越來越多,如何對(duì)這些類進(jìn)行有效的組織管理和有效使用,Java的解決辦法是“包”。包(Package)隨著Java的應(yīng)用,SUN公司的J40第四章面向?qū)ο螅ㄉ希?/p>

第四章面向?qū)ο螅ㄉ希?1什么是抽象類與對(duì)象及其關(guān)系類中定義的屬性(域)與方法(操作)對(duì)象構(gòu)造方法類成員屬性和方法的其它修飾符包(Package)

主要內(nèi)容什么是抽象主要內(nèi)容42什么是抽象什么是抽象43抽象的定義抽象(abstraction)是從被研究對(duì)象中舍棄個(gè)別的、非本質(zhì)的、或與研究主旨無關(guān)的次要特征,而抽取與研究有關(guān)的共性內(nèi)容加以考察,形成對(duì)研究問題正確的簡(jiǎn)明扼要的認(rèn)識(shí)。動(dòng)物經(jīng)過人類抽象用一個(gè)叫”動(dòng)物”的類來概括抽象的定義抽象(abstraction)是從被研究對(duì)象中舍棄44類與對(duì)象及其關(guān)系

類與對(duì)象及其關(guān)系45類與對(duì)象及其關(guān)系對(duì)象是對(duì)客觀事物的抽象。類是對(duì)對(duì)象的抽象,在語言中是一種抽象的數(shù)據(jù)類型。類的定義在Java中可簡(jiǎn)述為

class類名{}它們的關(guān)系是,對(duì)象是類的實(shí)例,類是對(duì)象的模板。

類與對(duì)象及其關(guān)系對(duì)象是對(duì)客觀事物的抽象。46類中定義的屬性與方法

類中定義的屬性與方法47類中定義的屬性(域)與方法(操作)類和對(duì)象都有屬性和操作,屬性是事物靜態(tài)特征的抽象,操作是事物動(dòng)態(tài)特征的抽象。如【例4.1】classFighterPlane{Stringname;intmissileNum;voidfire(){if(missileNum>0){missileNum-=1;System.out.println(“nowfireamissile!”);}else{System.out.println(“Nomissileleft!”);}}}類的屬性或稱為“域”類的方法類中定義的屬性(域)與方法(操作)類和對(duì)象都有屬性和操作,48類中的域變量和方法存在以下關(guān)系類中定義的域變量可以被類中所有的方法所訪問。方法中的形式參數(shù)和定義的局部變量的作用域僅限于方法,局部變量在使用前必須進(jìn)行賦值初始化。如果局部變量和類中的屬性變量重名,則在方法中對(duì)同名變量改變的是局部變量。類中定義的方法可以進(jìn)行遞歸調(diào)用【例4.2】類中的域變量和方法存在以下關(guān)系類中定義的域變量可以被類中所有49Java的類一個(gè)Java類形式上包含兩個(gè)部分:類首說明類體

Java的類一個(gè)Java類形式上包含兩個(gè)部分:50類首說明

類首說明的形式如下:

[修飾符]class類名[extends超類名][implements接口名列表]類的修飾符有private、public、abstract

、final。一個(gè)類可以同時(shí)有多個(gè)修飾符,但是不能有相同的修飾符。當(dāng)一個(gè)類有多個(gè)修飾符時(shí),這些修飾符無先后順序之分,可以任意的順序排列它們。注意:

abstract和final不能同時(shí)作為一個(gè)類的修飾符。private(私有):修飾的類只能被同一包名中的類訪問,這是Java默認(rèn)方式;public(公共):修飾的類能被所有的類訪問;abstract(抽象):修飾的類不能被實(shí)例化,它包含有未實(shí)現(xiàn)的方法。final(最終):修飾的類不能被繼承,即不能有子類。類名是所創(chuàng)建的類的名字,類名可以是任意的Java標(biāo)識(shí)符,根據(jù)Java命名的約定,類名的每個(gè)有意義的單詞的首字母要大寫,其余字母小寫。extends(繼承):保留字用來表明新創(chuàng)建的類繼承哪個(gè)類,被繼承的類稱為此類的超類。extends后面只能跟一個(gè)超類名稱。implements(實(shí)現(xiàn)):用來表明這個(gè)類實(shí)現(xiàn)了哪些接口,接口名可以有多個(gè)。

類首說明類首說明的形式如下:51類體

類體中定義了該類所有的成員變量和該類所支持的方法,其形式說明如下:類體{[成員變量說明][構(gòu)造方法說明][靜態(tài)初始化說明][方法說明]}類體由成員變量說明、構(gòu)造方法說明、靜態(tài)初始化說明和方法說明構(gòu)成,它們都是可選的。類體中的這四種說明沒有先后順序之分,但是為了類的可讀性,建議按照上面出現(xiàn)的順序說明。類體類體中定義了該類所有的成員變量和該類所支持的方法,其形52成員變量說明及其使用1.成員變量說明成員變量的說明類似于方法的局部變量說明,所不同的是,成員變量定義在類中,是類成員的一部分,整個(gè)類都可以訪問它。Java中成員變量說明形式如下:[修飾符]成員變量類型成員變量名列表;

成員變量的修飾符有以下幾種:缺省訪問修飾符、public、protected、private、final、static、transient和volatile。成員變量說明及其使用1.成員變量說明53(1)缺省訪問修飾符

缺省訪問修飾符的成員變量可以被同一包(package)中的任何類訪問。(2)public(公共)

public修飾的成員變量可以被項(xiàng)目文件中的任何方法所訪問。由于public成員變量不受限制,這易使類的對(duì)象引起不希望的修改,建議成員變量盡量不要使用public修飾符。(3)protected(受保護(hù))

protected修飾的成員變量可以被有繼承關(guān)系的類自由訪問,即子類可以訪問它。(4)private(私有)

private修飾的成員變量只能在同一個(gè)類中使用。這種方式通常是最為安全的。(5)static(靜態(tài)):(類變量)

static修飾的成員變量又稱為類變量。不加static修飾的成員變量又叫對(duì)象變量。對(duì)象變量依附于具體的對(duì)象實(shí)例,它的值因具體對(duì)象實(shí)例的不同而不同,而類變量為該類的所有對(duì)象共享,它的值不因類的對(duì)象不同而不同。(6)final(最終):(常量)final修飾的成員變量叫最終成員變量。一開始創(chuàng)建該變量時(shí)將其設(shè)定了一個(gè)值,在以后程序的運(yùn)行過程當(dāng)中,變量的值將一直保持這個(gè)值不變。最終變量又稱為常量。Java中的常量必須是類的成員。對(duì)于最終成員變量,任何賦值都將導(dǎo)致編譯錯(cuò)誤。因?yàn)槌A吭谡f明以后就不能改變其值,所以常量必須要使用變量初始化來賦初值。無論是實(shí)例變量,還是類變量,都可以被說明成常量。final修飾符和static修飾符并不沖突。成員變量類型可以是基本類型或類。成員變量名使用符合Java規(guī)定的標(biāo)識(shí)符來表示。(1)缺省訪問修飾符54成員變量使用

類的成員變量在定義它的類內(nèi)部,直接通過成員變量名來訪問。如從類的外部訪問,類變量和類對(duì)象變量的使用方法是不同。使用類變量的格式如下:

類名.類變量名由此可見,訪問類變量與類的對(duì)象構(gòu)造和對(duì)象都無關(guān)。訪問類對(duì)象變量的格式如下:類對(duì)象名.類對(duì)象變量名由此可見,要使用對(duì)象變量首先要構(gòu)造對(duì)象,獲得類對(duì)象名。類對(duì)象名即對(duì)應(yīng)的類變量名。成員變量使用類的成員變量在定義它的類內(nèi)部,直接通過成員變量55例4-1成員變量的訪問classPoint{finalstaticPointorigin=newPoint(0,0);//定義一個(gè)類變量,常量,origin為坐標(biāo)原點(diǎn)intx;inty;Point(intx,inty){thisx=x;this.y=y;}}publicclassUsingStatic{publicstaticvoidmain(Stringargs[]){Pointp1=Point(10,20);//構(gòu)造類Point的對(duì)象p1Pointp2=Point(310,120);System.out.println(″類Point中的類變量:″);System.out.println(″(″+Point.origin.x+″,″+Point.origin.y+″)″);//訪問類變量(類名.類變量名)

System.out.println(″類Point中的類實(shí)例變量:″);System.out.println(″(″+p1.x+″,″+p1..y+″)″);//訪問類對(duì)象變量x、y,p1是類對(duì)象名(類對(duì)象名.類對(duì)象變量名)}}例4-1成員變量的訪問56迪米特法則LawofDemeter1987,NortheasternUniversity火星登陸軟件,木星歐羅巴衛(wèi)星軌道飛船軟件系統(tǒng)Don’ttalktostrangers迪米特法則LawofDemeter57對(duì)象對(duì)象58對(duì)象的產(chǎn)生NEW類對(duì)象對(duì)象的產(chǎn)生使用的代碼:newFighterPlane();對(duì)象的聲明使用的代碼:FighterPlanefp;對(duì)象的產(chǎn)生NEW類對(duì)象對(duì)象的產(chǎn)生使用的代碼:new59NEW類對(duì)象可以聲明后立即賦予對(duì)象:FighterPlanefp=newFighterPlane()NEW類對(duì)象可以聲明后立即賦予對(duì)象:FighterPlane60對(duì)象內(nèi)存空間分布當(dāng)“FighterPlanefp=newFighterPlane()”處于某個(gè)方法中時(shí):對(duì)象內(nèi)存空間分布當(dāng)“FighterPlanefp=n61對(duì)象作為參數(shù)的特點(diǎn)普通數(shù)據(jù)類型作為參數(shù)傳遞是值傳遞,【例4.3】。對(duì)象是引用傳遞。a對(duì)象s對(duì)象as【例4.4】【例4.5】對(duì)象作為參數(shù)的特點(diǎn)普通數(shù)據(jù)類型作為參數(shù)傳遞是值傳遞,【例462對(duì)象數(shù)組MyClass[]mc=newMyClass[10];數(shù)組對(duì)象特點(diǎn)及常用方法具有對(duì)象引用的特點(diǎn),例【4.6】屬性length的用法,例【4.7】對(duì)象數(shù)組MyClass[]mc=newMyClas63構(gòu)造方法構(gòu)造方法64構(gòu)造方法的含義,【例4.8】構(gòu)造方法的特征,【例4.9】、【4.10】構(gòu)造方法的注意事項(xiàng)finalize方法與垃圾回收

什么是垃圾對(duì)象?垃圾對(duì)象何時(shí)回收?垃圾對(duì)象回收時(shí)調(diào)用finalize方法。構(gòu)造方法的含義,【例4.8】構(gòu)造方法的特征,【例4.9】、65構(gòu)造方法說明

每當(dāng)由類構(gòu)造對(duì)象時(shí)都要調(diào)用該類特定的構(gòu)造方法,在Java中,每個(gè)類都至少有一個(gè)構(gòu)造方法。構(gòu)造方法可以確保用戶正確地構(gòu)造類的對(duì)象,同時(shí),構(gòu)造方法也會(huì)對(duì)對(duì)象作初始化工作。構(gòu)造方法說明形式如下:

[構(gòu)造方法修飾符]方法名([形式參數(shù)列表])[throws異常列表]方法體構(gòu)造方法修飾符與一般方法修飾符相同,讀者參見4.3.3小節(jié)。

構(gòu)造方法不能像一般的方法那樣被直接調(diào)用,它是在構(gòu)造類的實(shí)例的時(shí)候被Java編譯器自動(dòng)調(diào)用的。當(dāng)我們構(gòu)造一個(gè)類的實(shí)例的時(shí)候,編譯器主要完成以下三件事情:(1)為對(duì)象分配內(nèi)存空間;(2)初始化對(duì)象中的實(shí)例變量的值,初始值可以是缺省值,或者變量按指定的值初始化;(3)調(diào)用對(duì)象的構(gòu)造方法。一個(gè)類的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類名。編譯器根據(jù)參數(shù)的類型來決定調(diào)用哪個(gè)構(gòu)造方法。構(gòu)造方法分為缺省的構(gòu)造方法(不帶參數(shù))和帶參數(shù)的構(gòu)造方法。構(gòu)造方法說明每當(dāng)由類構(gòu)造對(duì)象時(shí)都要調(diào)用該類特定的構(gòu)造方法,66缺省的構(gòu)造方法

如果類的定義沒有編制構(gòu)造方法,Java語言會(huì)自動(dòng)為用戶提供。這個(gè)由Java自動(dòng)提供的構(gòu)造方法就是所謂的缺省構(gòu)造方法。缺省的構(gòu)造方法確保每個(gè)Java類都至少有一個(gè)構(gòu)造方法,該方法應(yīng)符合類的定義。例如在例4-1的類Point中,如果我們沒有定義構(gòu)造方法,則Java自動(dòng)提供了一個(gè)缺省的構(gòu)造方法,如下:缺省的構(gòu)造方法:publicPoint(){};//對(duì)象成員變量的初值按Java規(guī)定

缺省的構(gòu)造方法如果類的定義沒有編制構(gòu)造方法,Java語言會(huì)67帶參數(shù)的構(gòu)造方法

帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)造一個(gè)新對(duì)象時(shí),類構(gòu)造方法可以按需要將一些指定的參數(shù)傳遞給構(gòu)造方法。如:publicPoint(intx,inty){this.x=x;this.y=y;}帶參數(shù)的構(gòu)造方法帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)68類成員屬性和方法的非訪問修飾符類成員屬性和方法的非訪問修飾符69方法說明

在Java中,方法總是Java類的一個(gè)組成部分。通過類的方法,改變對(duì)象的狀態(tài)。方法說明的格式如下:方法首部說明方法體方法說明分為方法首部說明和方法體兩部分。方法說明在Java中,方法總是Java類的一個(gè)組成部分。通70方法修飾符包括以下幾種:public修飾的方法可以由其他類訪問;protected修飾的方法只能由繼承關(guān)系的類訪問;private修飾的方法只能由說明該方法的類訪問;static修飾的方法為靜態(tài)方法,又叫類方法;無static修飾的方法為對(duì)象方法。類方法是該類的所有對(duì)象共享的方法。abstract修飾的方法為抽象方法,無其方法體;final修飾的方法為最終方法,不能由子類改變;synchronized(同步)修飾的方法執(zhí)行之前給方法設(shè)置同步機(jī)制,實(shí)現(xiàn)線程同步;native修飾的方法為本地方法,即方法實(shí)現(xiàn)與本機(jī)系統(tǒng)有關(guān)。方法修飾符包括以下幾種:71方法名是Java中任意的標(biāo)識(shí)符。按照命名的約定,方法名應(yīng)該是有意義的動(dòng)詞或動(dòng)詞短語,它的第一個(gè)字母一般要小寫,其他有意義的單詞的首字母要大寫,其余字母小寫。返回值類型可以是任意的Java類型,甚至可以是定義此方法的類。如果方法沒有返回值,則用void表示。形式參數(shù)列表是可選的。如果方法沒有形式參數(shù),就用一對(duì)小括號(hào)“()”表示。形式參數(shù)列表的形式如下:(類型形參名,類型形參名,……)throws異常列表規(guī)定了在方法執(zhí)行中可能導(dǎo)致的異常。第5章會(huì)詳細(xì)介紹。方法名是Java中任意的標(biāo)識(shí)符。按照命名的約定,方法名應(yīng)該是7

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論