第4章面向?qū)ο缶幊蘝第1頁(yè)
第4章面向?qū)ο缶幊蘝第2頁(yè)
第4章面向?qū)ο缶幊蘝第3頁(yè)
第4章面向?qū)ο缶幊蘝第4頁(yè)
第4章面向?qū)ο缶幊蘝第5頁(yè)
已閱讀5頁(yè),還剩44頁(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、1第第4章章 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?主要任務(wù)主要任務(wù): 理解面向?qū)ο缶幊痰幕靖拍罾斫饷嫦驅(qū)ο缶幊痰幕靖拍?了解類的封裝了解類的封裝 如何創(chuàng)建類和對(duì)象如何創(chuàng)建類和對(duì)象 了解成員變量和成員方法的特性了解成員變量和成員方法的特性 學(xué)習(xí)使用學(xué)習(xí)使用OOP方式進(jìn)行程序設(shè)計(jì)方式進(jìn)行程序設(shè)計(jì) 2本章主要內(nèi)容l1.面向?qū)ο蠡靖拍蠲嫦驅(qū)ο蠡靖拍?l2.Java的類與對(duì)象的類與對(duì)象 l3.程序舉例程序舉例 l 4.類成員的修飾類成員的修飾3面向?qū)ο竺嫦驅(qū)ο髄面向?qū)ο蠓治龊驮O(shè)計(jì)面向?qū)ο蠓治龊驮O(shè)計(jì)(ObjectOrientedAnalysis & Disign) 軟件開(kāi)發(fā)中,需求是不穩(wěn)定的;軟件開(kāi)

2、發(fā)中,需求是不穩(wěn)定的; 需求中相對(duì)穩(wěn)定的事物:對(duì)象;需求中相對(duì)穩(wěn)定的事物:對(duì)象; 面向?qū)ο螅阂詫?duì)象為基礎(chǔ)組織需求、構(gòu)架面向?qū)ο螅阂詫?duì)象為基礎(chǔ)組織需求、構(gòu)架系統(tǒng)系統(tǒng) ,實(shí)現(xiàn)軟件的重用性、靈活性和可擴(kuò),實(shí)現(xiàn)軟件的重用性、靈活性和可擴(kuò)展性。展性。l面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)(ObjectOrientedProgramming) 抽象、封裝、繼承、多態(tài)抽象、封裝、繼承、多態(tài)44.1 面向?qū)ο蠡靖拍蠲嫦驅(qū)ο蠡靖拍頙ava是完全面向?qū)ο缶幊蹋ㄊ峭耆嫦驅(qū)ο缶幊蹋∣OP)語(yǔ)言。)語(yǔ)言。l對(duì)象對(duì)象l類類l封裝封裝l消息消息l繼承繼承l(wèi)接口接口54.1.1 對(duì)象對(duì)象l 對(duì)象:在軟件開(kāi)發(fā)的對(duì)象:在軟件開(kāi)

3、發(fā)的信息世界中,對(duì)象定信息世界中,對(duì)象定義為相關(guān)數(shù)據(jù)和行為義為相關(guān)數(shù)據(jù)和行為的集合,是現(xiàn)實(shí)世界的集合,是現(xiàn)實(shí)世界對(duì)象的抽象模型。對(duì)象的抽象模型。有一個(gè)帳戶,帳戶中有一個(gè)帳戶,帳戶中有存款余額,您可以有存款余額,您可以對(duì)帳戶進(jìn)行存款與提對(duì)帳戶進(jìn)行存款與提款的動(dòng)作,并可以查款的動(dòng)作,并可以查詢以取得存款余額。詢以取得存款余額。賬戶賬戶余額余額存款存款提款提款查詢余額查詢余額屬性屬性行為行為對(duì)象對(duì)象l面向?qū)ο蟮姆治龇椒ǎ好嫦驅(qū)ο蟮姆治龇椒ǎ簢@問(wèn)題域中涉及的對(duì)圍繞問(wèn)題域中涉及的對(duì)象,對(duì)其進(jìn)行描述,完象,對(duì)其進(jìn)行描述,完成事務(wù)邏輯的分析和實(shí)成事務(wù)邏輯的分析和實(shí)現(xiàn)?,F(xiàn)。64.1.1 對(duì)象對(duì)象l在開(kāi)發(fā)軟件

4、的信息世界中,對(duì)象定義為在開(kāi)發(fā)軟件的信息世界中,對(duì)象定義為相關(guān)數(shù)據(jù)和方法的集合。相關(guān)數(shù)據(jù)和方法的集合。l對(duì)象是現(xiàn)實(shí)世界對(duì)象的抽象模型。從現(xiàn)對(duì)象是現(xiàn)實(shí)世界對(duì)象的抽象模型。從現(xiàn)實(shí)世界對(duì)象中抽象出來(lái)的對(duì)象,一般通實(shí)世界對(duì)象中抽象出來(lái)的對(duì)象,一般通過(guò)變量描述其狀態(tài),通過(guò)方法實(shí)現(xiàn)其行過(guò)變量描述其狀態(tài),通過(guò)方法實(shí)現(xiàn)其行為。為。l變量是一種有名稱的數(shù)據(jù)實(shí)體,而方法變量是一種有名稱的數(shù)據(jù)實(shí)體,而方法則是和對(duì)象相關(guān)的函數(shù)或過(guò)程。則是和對(duì)象相關(guān)的函數(shù)或過(guò)程。7 4.1.2 類 l 類:對(duì)象在語(yǔ)言級(jí)別上的描述;是對(duì)象的軟類:對(duì)象在語(yǔ)言級(jí)別上的描述;是對(duì)象的軟件圖紙、模板或原型,它定義了同類對(duì)象共件圖紙、模板或原型,

5、它定義了同類對(duì)象共有的有的屬性屬性和和行為(或稱為方法)行為(或稱為方法)。 l Java編程就是類的設(shè)計(jì)和使用;可以采用自編程就是類的設(shè)計(jì)和使用;可以采用自定義或繼承的方式設(shè)計(jì)一個(gè)類,也可以使用定義或繼承的方式設(shè)計(jì)一個(gè)類,也可以使用系統(tǒng)提供的資源類。系統(tǒng)提供的資源類。84.1.3 封裝封裝l 將抽象得到的數(shù)據(jù)和行為(功能)相結(jié)合,將抽象得到的數(shù)據(jù)和行為(功能)相結(jié)合,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的方法進(jìn)行有機(jī)的結(jié)合,封裝成數(shù)據(jù)的方法進(jìn)行有機(jī)的結(jié)合,封裝成“類類”。賬戶賬戶余額余額存款存款提款提款查詢余額查詢余額賬戶賬戶存款存款提款提款查詢余

6、額查詢余額l可以對(duì)對(duì)象的使用者隱藏某些屬性和實(shí)現(xiàn)可以對(duì)對(duì)象的使用者隱藏某些屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)其公開(kāi)需要的屬性和行為,以控細(xì)節(jié),僅對(duì)其公開(kāi)需要的屬性和行為,以控制在程序中屬性的讀和修改的訪問(wèn)級(jí)別。制在程序中屬性的讀和修改的訪問(wèn)級(jí)別。 l封裝的目的:模塊化和數(shù)據(jù)隱藏。封裝的目的:模塊化和數(shù)據(jù)隱藏。94.2 Java的類與對(duì)象的類與對(duì)象l Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,對(duì)客觀世界中的對(duì)象以類的形式進(jìn)行呈現(xiàn)。對(duì)客觀世界中的對(duì)象以類的形式進(jìn)行呈現(xiàn)。l 類是類是Java的核心,的核心,Java程序都由類組成,一程序都由類組成,一個(gè)程序至少要包含一個(gè)類,也可以

7、包含多個(gè)個(gè)程序至少要包含一個(gè)類,也可以包含多個(gè)類。類。104.2.1 類的定義類的定義l類的定義格式:類的定義格式:public abstract final extends 父類父類 implements 接口接口 類體(成員變量和成員方法)類體(成員變量和成員方法) 其中,其中, 表示為可選項(xiàng),表示為可選項(xiàng),表示為必選項(xiàng)。表示為必選項(xiàng)。對(duì)類名的要求:合法標(biāo)識(shí)符對(duì)類名的要求:合法標(biāo)識(shí)符111類體類體l 類體的作用:對(duì)象所具有的屬性和行為的代碼類體的作用:對(duì)象所具有的屬性和行為的代碼呈現(xiàn);呈現(xiàn);l 成員變量:成員變量: 以以變量聲明變量聲明的形式呈現(xiàn)對(duì)象的的形式呈現(xiàn)對(duì)象的數(shù)據(jù)屬性數(shù)據(jù)屬性; 發(fā)

8、現(xiàn)成員變量:發(fā)現(xiàn)成員變量:“找名詞找名詞”l 成員方法:成員方法: 以以定義方法定義方法的形式呈現(xiàn)對(duì)象所具有的的形式呈現(xiàn)對(duì)象所具有的動(dòng)態(tài)行為動(dòng)態(tài)行為; 發(fā)現(xiàn)成員方法:發(fā)現(xiàn)成員方法:“找動(dòng)詞找動(dòng)詞”12賬戶賬戶余額余額存款存款提款提款查詢余額查詢余額class Accountdouble deposit;String accountNumber;void save(double money)void draw(double money)132公共類公共類l 用用public 修飾的類為公共類;修飾的類為公共類;l public是訪問(wèn)限制最寬的修飾詞,公共類可以是訪問(wèn)限制最寬的修飾詞,公共類可以被

9、任何包中的類使用;資源類庫(kù)中的類基本都被任何包中的類使用;資源類庫(kù)中的類基本都是公共類;是公共類;l 在同一個(gè)源程序文件中只能定義一個(gè)在同一個(gè)源程序文件中只能定義一個(gè)public類;類;l 類的缺省訪問(wèn)權(quán)限為包訪問(wèn)權(quán)限。類的缺省訪問(wèn)權(quán)限為包訪問(wèn)權(quán)限。144.2.2 聲明和創(chuàng)建對(duì)象聲明和創(chuàng)建對(duì)象l 類是對(duì)象的產(chǎn)品模板。在現(xiàn)實(shí)世界里,我們使類是對(duì)象的產(chǎn)品模板。在現(xiàn)實(shí)世界里,我們使用的是產(chǎn)品而不是產(chǎn)品的圖紙。同樣道理,用的是產(chǎn)品而不是產(chǎn)品的圖紙。同樣道理,Java運(yùn)行的應(yīng)該是用類創(chuàng)建的實(shí)例化對(duì)象。運(yùn)行的應(yīng)該是用類創(chuàng)建的實(shí)例化對(duì)象。l一個(gè)典型的一個(gè)典型的Java程序會(huì)在設(shè)定的時(shí)刻創(chuàng)建多程序會(huì)在設(shè)定的時(shí)

10、刻創(chuàng)建多種對(duì)象,它們通過(guò)消息傳遞進(jìn)行相互交流,共種對(duì)象,它們通過(guò)消息傳遞進(jìn)行相互交流,共同完成程序的功能。一旦任務(wù)完成,對(duì)象就會(huì)同完成程序的功能。一旦任務(wù)完成,對(duì)象就會(huì)被垃圾收集器收回,完成它從創(chuàng)建、使用到清被垃圾收集器收回,完成它從創(chuàng)建、使用到清除的過(guò)程。除的過(guò)程。l實(shí)例化對(duì)象的聲明:實(shí)例化對(duì)象的聲明: 銀行帳戶類銀行帳戶類accountNumberbankNameownerdepositMary的銀行帳戶的銀行帳戶12345678First National BankMary$10244.8Mike的銀行帳戶的銀行帳戶11111111First National BankMike$1024

11、.48151、對(duì)象的初始化、對(duì)象的初始化l 變量的初始化變量的初始化局部變量聲明后若沒(méi)有賦值,在使用變量時(shí)局部變量聲明后若沒(méi)有賦值,在使用變量時(shí)會(huì)出現(xiàn)錯(cuò)誤;會(huì)出現(xiàn)錯(cuò)誤;l 實(shí)例化對(duì)象的初始化實(shí)例化對(duì)象的初始化構(gòu)造方法構(gòu)造方法l 構(gòu)造方法的作用:是類的成員方法,一般完構(gòu)造方法的作用:是類的成員方法,一般完成對(duì)象數(shù)據(jù)的初始化操作;創(chuàng)建類的對(duì)象時(shí)成對(duì)象數(shù)據(jù)的初始化操作;創(chuàng)建類的對(duì)象時(shí)系統(tǒng)會(huì)根據(jù)具體情況調(diào)用構(gòu)造方法。系統(tǒng)會(huì)根據(jù)具體情況調(diào)用構(gòu)造方法。16class MyBox private int x, y; private int width; private int height; MyBox()

12、 x=0;y=0; width=10; height=10; public 類名類名(參數(shù)列表參數(shù)列表) 構(gòu)造方法的語(yǔ)法特性:構(gòu)造方法的語(yǔ)法特性:方法名與類名相同;方法名與類名相同;方法定義時(shí)不書(shū)寫方法類型方法定義時(shí)不書(shū)寫方法類型,沒(méi)有,沒(méi)有 return 語(yǔ)句;語(yǔ)句;如果用戶沒(méi)有顯式定義構(gòu)造如果用戶沒(méi)有顯式定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)給定義的類方法,系統(tǒng)會(huì)自動(dòng)給定義的類加一個(gè)參數(shù)為空、方法體為空加一個(gè)參數(shù)為空、方法體為空的構(gòu)造方法;的構(gòu)造方法;如果顯示定義了構(gòu)造方法,如果顯示定義了構(gòu)造方法,則默認(rèn)的空構(gòu)造方法失效。則默認(rèn)的空構(gòu)造方法失效。172. 創(chuàng)建對(duì)象創(chuàng)建對(duì)象l 在在Java中通過(guò)中通過(guò)ne

13、w運(yùn)算符動(dòng)態(tài)創(chuàng)建對(duì)象運(yùn)算符動(dòng)態(tài)創(chuàng)建對(duì)象 對(duì)象名對(duì)象名 = new 類名類名(參數(shù)列表參數(shù)列表); Account account01=new Account(); MyBox b2=new MyBox();l 創(chuàng)建對(duì)象時(shí)系統(tǒng)做的工作:創(chuàng)建對(duì)象時(shí)系統(tǒng)做的工作: (1)動(dòng)態(tài)申請(qǐng)堆內(nèi)存空間,用于存放對(duì)象數(shù)動(dòng)態(tài)申請(qǐng)堆內(nèi)存空間,用于存放對(duì)象數(shù)據(jù);據(jù); (2)根據(jù)創(chuàng)建對(duì)象參數(shù)的書(shū)寫形式,調(diào)用對(duì)根據(jù)創(chuàng)建對(duì)象參數(shù)的書(shū)寫形式,調(diào)用對(duì)象的構(gòu)造方法。象的構(gòu)造方法。183. 數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)的存儲(chǔ)l 棧區(qū)(棧區(qū)(stack) 由系統(tǒng)自動(dòng)分配釋放由系統(tǒng)自動(dòng)分配釋放 ,存,存放函數(shù)的參數(shù)值,局部變量的值等。其操作放函數(shù)的參

14、數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。 l 堆區(qū)(堆區(qū)(heap) 由程序員分配釋放,由程序員分配釋放, 若程若程序員不釋放,程序結(jié)束時(shí)可能由序員不釋放,程序結(jié)束時(shí)可能由OS回收。它回收。它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類似與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類似于鏈表。于鏈表。 l 程序代碼區(qū)程序代碼區(qū) 存放程序可執(zhí)行代碼;通常情存放程序可執(zhí)行代碼;通常情況下,程序中的常量信息也存放于程序代碼況下,程序中的常量信息也存放于程序代碼區(qū)。區(qū)。 19class Person int id;int age;Person(int _id, int _age)

15、id = _id; age = _age;public static void main(String args)int i = 10; Person p1; p1 = new Person(101, 20); System.out.println(p1.id);stack (棧)10*id:age:heap(堆)10120i:p1:20l 注意區(qū)分成員變量和局部變量,成員變量歸注意區(qū)分成員變量和局部變量,成員變量歸成員方法共有;成員方法共有;l 一個(gè)類里最多只能有一個(gè)一個(gè)類里最多只能有一個(gè)main方法;一般情方法;一般情況下,將帶有況下,將帶有main方法的類稱為主類或測(cè)試方法的類稱為主類或

16、測(cè)試類類l 一個(gè)完整的一個(gè)完整的JavaApplication應(yīng)用程序中,應(yīng)用程序中,至少要包含一個(gè)帶有至少要包含一個(gè)帶有main方法的類的定義。方法的類的定義。214對(duì)象成員的訪問(wèn)對(duì)象成員的訪問(wèn)l 使用成員運(yùn)算符使用成員運(yùn)算符 “.” 訪問(wèn)對(duì)象的成員變量和訪問(wèn)對(duì)象的成員變量和成員方法:成員方法:對(duì)象名對(duì)象名.成員變量名成員變量名對(duì)象名對(duì)象名.成員方法名成員方法名(實(shí)參列表實(shí)參列表)如:如:p1.id =101; int i = p1.getAge();l 這里的這里的“.”是是Java中用于訪問(wèn)對(duì)象的成員的中用于訪問(wèn)對(duì)象的成員的運(yùn)算符。運(yùn)算符。l 注意:不能通過(guò)成員運(yùn)算符訪問(wèn)對(duì)象的構(gòu)造注意:

17、不能通過(guò)成員運(yùn)算符訪問(wèn)對(duì)象的構(gòu)造方法。方法。225清除對(duì)象:清除對(duì)象:java的垃圾回收機(jī)制的垃圾回收機(jī)制l 使用使用new操作符創(chuàng)建對(duì)象后,操作符創(chuàng)建對(duì)象后,Java虛擬虛擬機(jī)自動(dòng)為該對(duì)象分配內(nèi)存并保持跟蹤。機(jī)自動(dòng)為該對(duì)象分配內(nèi)存并保持跟蹤。Java虛擬機(jī)對(duì)不再被引用的對(duì)象釋放其虛擬機(jī)對(duì)不再被引用的對(duì)象釋放其占用的內(nèi)存。這種定期尋找不再使用的占用的內(nèi)存。這種定期尋找不再使用的對(duì)象并自動(dòng)釋放對(duì)象占用內(nèi)存的過(guò)程稱對(duì)象并自動(dòng)釋放對(duì)象占用內(nèi)存的過(guò)程稱為垃圾收集。為垃圾收集。236.抽象類(抽象類(abstract)l 有時(shí),定義的類代表了一個(gè)抽象的概念,在該有時(shí),定義的類代表了一個(gè)抽象的概念,在該概

18、念層面上并沒(méi)有實(shí)際的數(shù)據(jù)。概念層面上并沒(méi)有實(shí)際的數(shù)據(jù)。 例如,例如,java.lang包中的包中的Number類代表了數(shù)這個(gè)抽象類代表了數(shù)這個(gè)抽象概念,可以用它在程序中產(chǎn)生一個(gè)數(shù)的子類,概念,可以用它在程序中產(chǎn)生一個(gè)數(shù)的子類,如如Interger或或Float,但從,但從Number中直接生成對(duì)中直接生成對(duì)象是沒(méi)有意義的。象是沒(méi)有意義的。l Java語(yǔ)言中可以使用語(yǔ)言中可以使用abstract修飾類,表示該修飾類,表示該類為抽象類類為抽象類 abstract class l 不能用不能用new實(shí)例化一個(gè)抽象類。實(shí)例化一個(gè)抽象類。244.3 程序舉例程序舉例l 例例 顯示當(dāng)前日期和時(shí)間,運(yùn)行結(jié)果

19、見(jiàn)圖:顯示當(dāng)前日期和時(shí)間,運(yùn)行結(jié)果見(jiàn)圖:25設(shè)計(jì)類:設(shè)計(jì)類:以字串形式返回系統(tǒng)當(dāng)前時(shí)間和日期的以字串形式返回系統(tǒng)當(dāng)前時(shí)間和日期的類。類。涉及到的資源:涉及到的資源:1. Java Applet小應(yīng)用程序的設(shè)計(jì)模型小應(yīng)用程序的設(shè)計(jì)模型2. 用于時(shí)間操作的類:用于時(shí)間操作的類:Calendar26import java.awt.Graphics;import java.applet.Applet;import java.util.Calendar;class Time Calendar t; int y, m, d, hh, mm, ss;程序代碼:程序代碼:27 Time () t=Calend

20、ar.getInstance(); /獲得一個(gè)單一的日歷對(duì)象獲得一個(gè)單一的日歷對(duì)象 y=t.get(t.YEAR); m=t.get(t.MONTH)+1; d=t.get(t.DATE); hh=t.get(t.HOUR_OF_DAY); mm=t.get(t.MINUTE); ss=t.get(t.SECOND); 28public String getDate() return y+ 年年+m+月月+d+日日; public String getTime() String s=hh+ 時(shí)時(shí)+mm+分分+ss+秒秒; return s; 29public class ShowTime ex

21、tends Applet Time t=new Time(); /重寫重寫paint方法方法 public void paint(Graphics g) g.drawString(當(dāng)前日期:當(dāng)前日期:+t.getDate(),50,40); g.drawString(當(dāng)前時(shí)間:當(dāng)前時(shí)間:+t.getTime(),50,80); 304.4 類成員的修飾類成員的修飾4.4.1 成員變量的修飾成員變量的修飾l成員變量的聲明語(yǔ)句有如下格式:成員變量的聲明語(yǔ)句有如下格式: public privateprotected/多選一多選一 static final transient volatile 31

22、1訪問(wèn)控制權(quán)限(封裝特性的體現(xiàn))訪問(wèn)控制權(quán)限(封裝特性的體現(xiàn))l (1)public 公共變量公共變量 由由public修飾的成員變量稱為類的公共變量。修飾的成員變量稱為類的公共變量。只有在確認(rèn)任何外部訪問(wèn)都不會(huì)帶來(lái)不良后只有在確認(rèn)任何外部訪問(wèn)都不會(huì)帶來(lái)不良后果的情況下才將成員聲明為公共的。公共變果的情況下才將成員聲明為公共的。公共變量沒(méi)有秘密可言,不具有數(shù)據(jù)保護(hù)功能。量沒(méi)有秘密可言,不具有數(shù)據(jù)保護(hù)功能。 l (2)private私有變量私有變量 由由private修飾的變量稱為私有變量,只能被修飾的變量稱為私有變量,只能被聲明它的類內(nèi)方法使用,拒絕任何外部類的聲明它的類內(nèi)方法使用,拒絕任何外

23、部類的訪問(wèn),即不能通過(guò)訪問(wèn)運(yùn)算符在類外進(jìn)行訪訪問(wèn),即不能通過(guò)訪問(wèn)運(yùn)算符在類外進(jìn)行訪問(wèn)。問(wèn)。322 static靜態(tài)成員變量靜態(tài)成員變量public privateprotected/多選一多選一 static final transient volatile 系統(tǒng)對(duì)成員變量的處理:系統(tǒng)對(duì)成員變量的處理:對(duì)于類的非靜態(tài)成員變量,當(dāng)創(chuàng)建對(duì)象時(shí),對(duì)于類的非靜態(tài)成員變量,當(dāng)創(chuàng)建對(duì)象時(shí),JVM為其分配存儲(chǔ)空間;為其分配存儲(chǔ)空間;對(duì)于類的靜態(tài)成員變量,在類加載時(shí)對(duì)于類的靜態(tài)成員變量,在類加載時(shí)JVM為為其分配內(nèi)存空間,并為類的所有對(duì)象所共有。其分配內(nèi)存空間,并為類的所有對(duì)象所共有。33class Stud

24、ent int id;static int totalNumber;Student(int _id)id = _id; totalNumber +;public static void main(String args)Student s1, s2; s1 = new Student(101);s2 = new Student(102); System.out.println(s1.id); System.out.println(s1.school);id:101*s1:*s2:id:102totalNumber: 1l類的每個(gè)實(shí)例對(duì)象都擁有類的每個(gè)實(shí)例對(duì)象都擁有自己的非靜態(tài)成員變量自己的非靜

25、態(tài)成員變量l靜態(tài)成員變量供類的所有靜態(tài)成員變量供類的所有實(shí)例對(duì)象所共有;實(shí)例對(duì)象所共有;234靜態(tài)成員變量的訪問(wèn):靜態(tài)成員變量的訪問(wèn):靜態(tài)成員變量歸屬于類,故可以將類的靜態(tài)靜態(tài)成員變量歸屬于類,故可以將類的靜態(tài)成員變量稱為成員變量稱為類變量類變量;可以通過(guò)可以通過(guò) 類名類名. 靜態(tài)成員變量名靜態(tài)成員變量名 的方式訪問(wèn)的方式訪問(wèn)非私有靜態(tài)成員變量;非私有靜態(tài)成員變量;System.out.println(Student.totalNumber);35什么情況下將成員變量聲明為靜態(tài)成員變量?什么情況下將成員變量聲明為靜態(tài)成員變量?在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,如果一個(gè)類的某個(gè)在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,如果

26、一個(gè)類的某個(gè)屬性值是所有該類對(duì)象共有的,可以將其設(shè)置屬性值是所有該類對(duì)象共有的,可以將其設(shè)置為靜態(tài)成員變量;為靜態(tài)成員變量; 在某些場(chǎng)合下,不想創(chuàng)建類的實(shí)例,僅僅使用在某些場(chǎng)合下,不想創(chuàng)建類的實(shí)例,僅僅使用類的某些數(shù)據(jù)信息。類的某些數(shù)據(jù)信息。363final 最終變量最終變量l 一旦成員變量被聲明為一旦成員變量被聲明為final,在程序運(yùn)行中,在程序運(yùn)行中其值將不能被改變。這樣的成員變量就是一其值將不能被改變。這樣的成員變量就是一個(gè)常量。例如:個(gè)常量。例如: final double PI=3.14159;l 該語(yǔ)句聲明一個(gè)常量該語(yǔ)句聲明一個(gè)常量PI,如果在后面試圖重,如果在后面試圖重新對(duì)它賦

27、值,將產(chǎn)生編譯錯(cuò)誤。另外,常量新對(duì)它賦值,將產(chǎn)生編譯錯(cuò)誤。另外,常量名一般用大寫字母。名一般用大寫字母。374.4.2 成員方法的修飾成員方法的修飾l 成員方法相當(dāng)于其它語(yǔ)言的函數(shù)或過(guò)程,是成員方法相當(dāng)于其它語(yǔ)言的函數(shù)或過(guò)程,是命令語(yǔ)句的集合。成員方法的聲明格式和順命令語(yǔ)句的集合。成員方法的聲明格式和順序如下:序如下: public/private/protected static final abstract native synchronized 類型類型 方法名方法名(形參列表形參列表) throws 異常類異常類型型方法體;方法體;381成員方法的訪問(wèn)權(quán)限成員方法的訪問(wèn)權(quán)限l 成員方法

28、的訪問(wèn)權(quán)限說(shuō)明同成員變量的訪問(wèn)成員方法的訪問(wèn)權(quán)限說(shuō)明同成員變量的訪問(wèn)權(quán)限說(shuō)明;權(quán)限說(shuō)明;l 由于方法是外界和對(duì)象進(jìn)行消息傳遞的途徑,由于方法是外界和對(duì)象進(jìn)行消息傳遞的途徑,所以一個(gè)類中常有多個(gè)所以一個(gè)類中常有多個(gè)public公有訪問(wèn)權(quán)限公有訪問(wèn)權(quán)限的成員方法。的成員方法。39Student stu = new Student();stu.setAge (-12); class Student int age;public class Test pubic static void main(String args)Student stu = new Student();stu.age = -12

29、; class Student private int age; void setAge(int _age)if(_age 100 | _age 0)age = 20;else age = _age; int getAge()return age; l為了確保數(shù)據(jù)的訪問(wèn)安全性,為了確保數(shù)據(jù)的訪問(wèn)安全性,一般將類的成員變量聲明為一般將類的成員變量聲明為private訪問(wèn)權(quán)限;訪問(wèn)權(quán)限;l可以為私有成員變量設(shè)計(jì)公可以為私有成員變量設(shè)計(jì)公有的有的get、set方法,供外界訪方法,供外界訪問(wèn)。問(wèn)。402abstract 抽象方法抽象方法l 可用可用abstract定義沒(méi)有方法體的抽象方法。定義沒(méi)有方法

30、體的抽象方法。l 抽象方法只能出現(xiàn)在抽象類中,用以給出該類事抽象方法只能出現(xiàn)在抽象類中,用以給出該類事物應(yīng)該具有的行為,但沒(méi)有統(tǒng)一的處理方式。物應(yīng)該具有的行為,但沒(méi)有統(tǒng)一的處理方式。 Animal + String species + void yell() abstract class Animal String species; public abstract void yell(); /注意空方法與抽象方法的區(qū)別注意空方法與抽象方法的區(qū)別412abstract 抽象方法抽象方法l只能在抽象類中聲明抽象方法;只能在抽象類中聲明抽象方法;labstract不能和不能和final、privat

31、e、static疊用疊用修飾抽象方法。修飾抽象方法。l一個(gè)抽象類可以定義統(tǒng)一的編程接口,用以描一個(gè)抽象類可以定義統(tǒng)一的編程接口,用以描述同類事物共同的狀態(tài)和行為,但各自的實(shí)現(xiàn)細(xì)述同類事物共同的狀態(tài)和行為,但各自的實(shí)現(xiàn)細(xì)節(jié)是不同的。該類事物派生出來(lái)的類共有的行為節(jié)是不同的。該類事物派生出來(lái)的類共有的行為由抽象類中的抽象方法來(lái)約束,行為的具體實(shí)現(xiàn)由抽象類中的抽象方法來(lái)約束,行為的具體實(shí)現(xiàn)由派生出的類給出。由派生出的類給出。423static 靜態(tài)方法靜態(tài)方法l靜態(tài)方法也稱為類方法,在不創(chuàng)建類的對(duì)象的靜態(tài)方法也稱為類方法,在不創(chuàng)建類的對(duì)象的情況下可以通過(guò)類名調(diào)用類方法。調(diào)用格式:情況下可以通過(guò)類名調(diào)

32、用類方法。調(diào)用格式:類名類名.靜態(tài)方法名();靜態(tài)方法名();Math.pow(4.5, 3);l在靜態(tài)方法中不能直接引用非靜態(tài)成員;在靜態(tài)方法中不能直接引用非靜態(tài)成員;l構(gòu)造方法不能被聲明為靜態(tài)方法。構(gòu)造方法不能被聲明為靜態(tài)方法。43習(xí)習(xí) 題題l1靜態(tài)變量有何特點(diǎn)?如何引用靜態(tài)靜態(tài)變量有何特點(diǎn)?如何引用靜態(tài)變量?變量?l2.靜態(tài)方法有何特點(diǎn)?靜態(tài)方法引用成靜態(tài)方法有何特點(diǎn)?靜態(tài)方法引用成員變量時(shí)有何要求?員變量時(shí)有何要求?l3.何為抽象類、抽象方法?何為抽象類、抽象方法?l4.類與對(duì)象有何關(guān)系?如何創(chuàng)建對(duì)象?類與對(duì)象有何關(guān)系?如何創(chuàng)建對(duì)象?44 l6.Java程序由什么構(gòu)成?程序設(shè)計(jì)的基程序

33、由什么構(gòu)成?程序設(shè)計(jì)的基本思想是什么?本思想是什么?l8.什么是類變量、成員變量、局部變量?什么是類變量、成員變量、局部變量?45 l 11.指出下面關(guān)于垃圾收集的哪些敘述是對(duì)的。(指出下面關(guān)于垃圾收集的哪些敘述是對(duì)的。(B)l A. 程序開(kāi)發(fā)者必須自己創(chuàng)建一個(gè)線程進(jìn)行內(nèi)存釋程序開(kāi)發(fā)者必須自己創(chuàng)建一個(gè)線程進(jìn)行內(nèi)存釋放的工作。放的工作。 l B. 垃圾收集將檢查并釋放不再使用的內(nèi)存。垃圾收集將檢查并釋放不再使用的內(nèi)存。 l C. 垃圾收集允許程序開(kāi)發(fā)者明確指定并立即釋放垃圾收集允許程序開(kāi)發(fā)者明確指定并立即釋放該內(nèi)存。該內(nèi)存。 l D. 垃圾收集能夠在期望的時(shí)間釋放被垃圾收集能夠在期望的時(shí)間釋放被java對(duì)象使對(duì)象使用的內(nèi)存。用的內(nèi)存。 l 12.下面關(guān)于變量及其范圍的陳述哪些是對(duì)的。下面關(guān)于變量及其范圍的陳述哪些是對(duì)的。(ACD) l A. 實(shí)例變量是類的成員變量。實(shí)例變量是類的成員變量。 l B. 實(shí)例變量用關(guān)鍵字實(shí)例變量用關(guān)鍵字static聲明。聲明。 l C. 在方法中定義的局部變量在該方法被執(zhí)行時(shí)創(chuàng)建。在方法中定義的局部變量在該方法被執(zhí)行時(shí)創(chuàng)建。 l D.

溫馨提示

  • 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)論