第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件

上傳人:文*** 文檔編號:61734468 上傳時(shí)間:2022-03-12 格式:PPT 頁數(shù):41 大?。?53.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件_第1頁
第1頁 / 共41頁
第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件_第2頁
第2頁 / 共41頁
第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件_第3頁
第3頁 / 共41頁

本資源只提供3頁預(yù)覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

20 積分

下載資源

資源描述:

《第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件》由會員分享,可在線閱讀,更多相關(guān)《第4章面向?qū)ο缶幊逃?jì)算機(jī)教學(xué)課件(41頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、1第第4章章 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?主要任務(wù): 理解面向?qū)ο缶幊痰幕靖拍?了解類的封裝方法 如何創(chuàng)建類和對象 了解成員變量和成員方法的特性 學(xué)習(xí)使用OOP方式進(jìn)行程序設(shè)計(jì) 2實(shí)驗(yàn)安排實(shí)驗(yàn)安排 地點(diǎn):第9實(shí)驗(yàn)樓512和518;3實(shí)驗(yàn)安排實(shí)驗(yàn)安排 分為2個(gè)部分: 雙周周二晚上沒課的同學(xué)上實(shí)驗(yàn)課,從 7:0010:30,具體為第4、6、8、 10、12、14周; 單周周二晚上有課的同學(xué),周二和周四分2次上實(shí)驗(yàn)課,從9:00到10:30;具體為第5、7、9、11、13、15周;44.3 成員變量與封裝成員變量與封裝l成員變量描述了類和對象的狀態(tài),有時(shí)也稱為屬性、數(shù)據(jù)、域(field)。l對成員變

2、量的操作實(shí)際上就是改變類和對象的狀態(tài),使之能滿足程序的需要。與類相似,成員變量也有很多修飾符,用來控制對成員變量的訪問,實(shí)現(xiàn)對類和對象的封裝。54.3.1成員變量的聲明成員變量的聲明l 例4.4 顯示當(dāng)前日期和時(shí)間,運(yùn)行結(jié)果見圖:6import java.awt.Graphics;import java.applet.Applet;import java.util.Calendar;class Time private Calendar t; private int y, m, d, hh, mm, ss;7 Time () t=Calendar.getInstance(); y=t.get(

3、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); 8public String getDate() return y+ 年+m+月+d+日; public String getTime() String s=hh+ 時(shí)+mm+分+ss+秒; return s; 9public class ShowTime extends Applet Time t=new Time(); public void paint(Graphics

4、 g) g.drawString(當(dāng)前日期:+t.getDate(),50,40); g.drawString(當(dāng)前時(shí)間:+t.getTime(),50,80); 104.3.2 成員變量的修飾成員變量的修飾l成員變量的聲明語句有如下格式: public private protected package / 訪問控制修飾符 static final transient volatile 111訪問控制權(quán)限l(1)public 公共變量 由public修飾的變量稱為公共變量,可被任何包中的任何類訪問,只有在確認(rèn)任何外部訪問都不會帶來不良后果的情況下才將成員聲明為公共的。公共變量對任何類都是可見

5、的,因此它沒有秘密可言,不具有數(shù)據(jù)保護(hù)功能。 l(2)private私有變量 由private修飾的變量稱為私有變量,只能被聲明它的類所使用,拒絕任何外部類的訪問。私有變量是不公開的,它們得到了最好的保護(hù),這是對類進(jìn)行封裝時(shí)使用的主要方法。12l(3)protected 受保護(hù)變量 由protected修飾的變量稱為受保護(hù)變量,可被聲明它的類和派生的子類以及同一個(gè)包中的類訪問。 l(4)package包變量 由package修飾的變量稱為包變量,在聲明時(shí)常常省略package關(guān)鍵字,即沒有修飾符的成員被視為包成員。包成員可被聲明它的類和同一個(gè)包中的其它類(包括派生子類)所訪問,在其它包中的子類

6、則不能訪問父類的包成員。 132static 靜態(tài)變量lstatic聲明的成員變量被視為類的成員變量,而不把它當(dāng)作實(shí)例對象的成員變量。換句話說,靜態(tài)變量是類固有的,可以直接引用,其它成員變量僅僅被聲明,生成實(shí)例對象后才存在,才可以被引用。基于這樣的事實(shí),也把靜態(tài)變量稱為類變量,非靜態(tài)變量稱為實(shí)例變量。相應(yīng)地,靜態(tài)方法稱為類方法,非靜態(tài)方法稱為實(shí)例方法。 14例4.5 靜態(tài)變量的使用。class StaticDemo static int x; int y; static public int getX() return x; static public void setX(int newX)

7、x = newX; 15 public int getY() return y; public void setY(int newY) y = newY; 16public class ShowDemo public static void main(String args) System.out.println(靜態(tài)變量x=+StaticDemo.getX(); System.out.println(實(shí)例變量y=+StaticDemo.getY(); / 非法,編譯時(shí)將出錯(cuò) StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDem

8、o();17 a.setX(1); a.setY(2); b.setX(3); b.setY(4); System.out.println(靜態(tài)變量a.x=+a.getX(); System.out.println(實(shí)例變量a.y=+a.getY(); System.out.println(靜態(tài)變量b.x=+b.getX(); System.out.println(實(shí)例變量b.y=+b.getY(); 18對上面的源程序進(jìn)行編譯會出現(xiàn)如圖所示結(jié)果,不能進(jìn)行運(yùn)行該程序。19 將源程序中的出錯(cuò)語句刪除或使用解釋符/隱藏起來如: /System.out.println(“實(shí)例變量y=”+Static

9、Demo.getY(); / 非法,編譯時(shí)將出錯(cuò),再進(jìn)行編譯,即可執(zhí)行該程序,結(jié)果如圖所示。20從輸出結(jié)果中可以得出以下幾點(diǎn)結(jié)論 :l 類的靜態(tài)變量可以直接引用,例如在程序中直接使用了StaticDemo.getX(),而非靜態(tài)變量則不行。類的靜態(tài)變量相當(dāng)于某些程序語言的全局變量。l 靜態(tài)方法只能使用靜態(tài)變量,不能使用實(shí)例變量。 l 類的靜態(tài)變量只有一個(gè)版本,所有實(shí)例對象引用的都是同一個(gè)版本。 l 對象實(shí)例化后,每個(gè)實(shí)例變量都被制作了一個(gè)副本,它們之間互不影響。 213final 最終變量l一旦成員變量被聲明為final,在程序運(yùn)行中將不能被改變。這樣的成員變量就是一個(gè)常量。例如: final

10、 double PI=3.14159;l該語句聲明一個(gè)常量PI,如果在后面試圖重新對它賦值,將產(chǎn)生編譯錯(cuò)誤。另外,常量名一般用大寫字母。常量和直接量一樣不占用內(nèi)存空間。224transient 過渡變量lJava語言目前對transient修飾符沒有明確說明,它一般用在對象序列化(object serialization)上,說明成員變量不許被序列化。5volatile 易失變量lvolatile聲明的成員變量為易失變量,用來防止編譯器對該成員進(jìn)行某種優(yōu)化。這是Java語言的高級特性,僅被少數(shù)程序員使用。234.4 成員方法成員方法l對象的行為由類的方法實(shí)現(xiàn),其它對象可以調(diào)用一個(gè)對象的方法,通

11、過消息的傳遞實(shí)現(xiàn)對該對象行為的控制。l下面討論如何通過方法影響對象的行為。244.4.1 成員方法的設(shè)計(jì)成員方法的設(shè)計(jì)l類的設(shè)計(jì)集中體現(xiàn)在成員方法的設(shè)計(jì)上。良好的設(shè)計(jì)可以使類更加強(qiáng)壯,功能更加完善。成員方法的設(shè)計(jì)應(yīng)該從類的整體行為出發(fā),能正確響應(yīng)外部消息,自然地改變對象的狀態(tài),并符合相對獨(dú)立性、結(jié)構(gòu)清晰、可重用性強(qiáng)等編程要求。l來看下面的例子:25例4.6 方法對對象行為的影響,運(yùn)行結(jié)果見圖:26import java.awt.*;import java.applet.Applet;class DrawShape private int x, y, shape; public void set

12、Pos(int xPos, int yPos) x=xPos; y=yPos; 27 public void setShape(int choice) shape=choice; public void draw(Graphics g) if (shape =1) g.drawRect(x, y, 60, 60); else if (shape =2) g.drawOval(x, y, 60, 60); else g.drawString(形狀參數(shù)不對!, 20, 120); 28public class M1 extends Applet final int BOX=1, OVAL=2; D

13、rawShape a=new DrawShape(); public void paint(Graphics g) a.setPos(40,20); a.setShape(BOX); a.draw(g); a.setPos(200,60); a.setShape(OVAL); a.draw(g); 294.4.2 成員方法的聲明與修飾成員方法的聲明與修飾l 成員方法相當(dāng)于其它語言的函數(shù)或過程,是命令語句的集合。成員方法的聲明一般放在成員變量的聲明之后,聲明語句的格式和順序如下: public private protected package / 訪問控制修飾符 static final ab

14、stract native synchronized 返回值類型 方法名(參數(shù)表)throws 異常類型30不同含義的修飾符 :1final 最終方法l 方法被聲明為最終方法后,將不能被子類覆蓋,即最終方法能被子類繼承和使用但不能在子類中修改或重新定義它。這種修飾可以保護(hù)一些重要的方法不被修改,尤其是那些對類的狀態(tài)和行為有關(guān)鍵性作用的方法被保護(hù)以后,可以避免未知情況的發(fā)生。l 在OOP中,子類可以把父類的方法重新定義,使之具有新功能但又和父類的方法同名、同參數(shù)、同返回值,這種情況稱為方法覆蓋(override)。312abstract 抽象方法l 一個(gè)抽象類可以含有抽象方法。所謂抽象方法是指不

15、能實(shí)現(xiàn)的方法,因?yàn)樗鼪]有方法體,所以抽象方法不能出現(xiàn)在非抽象類中。l 為什么要使用抽象類和抽象方法呢?一個(gè)抽象類可以定義一個(gè)統(tǒng)一的編程接口,使其子類表現(xiàn)出共同的狀態(tài)和行為,但各自的細(xì)節(jié)是不同的。子類共有的行為由抽象類中的抽象方法來約束,而子類行為的具體細(xì)節(jié)則通過抽象方法的覆蓋來實(shí)現(xiàn)。這種機(jī)制可增加編程的靈活性,也是OOP繼承樹的衍生基礎(chǔ)。323native 本地方法l 用其它語言編寫的方法在Java中稱為本地方法。如果你有一個(gè)用其它語言如C+ 寫成的函數(shù),希望在Java中能利用這些資源,你可以編寫本地方法。l SDK提供了Java本地接口JNI(Java Native Interface),使

16、得Java虛擬機(jī)能運(yùn)行嵌入在Java程序中的其它語言的代碼。這些語言包括C/C+、Fortran、匯編語言等等。l 嵌入外部語言代碼出于以下幾點(diǎn)考慮:Java系統(tǒng)包不提供對平臺依賴性程序的支持時(shí);想利用現(xiàn)有的其它語言資源時(shí);出于運(yùn)行速度的要求而使用其它語言開發(fā)的運(yùn)行模塊。334synchronized 同步方法l 同步方法用于多線程編程。多線程在運(yùn)行時(shí),可能會同時(shí)存取一個(gè)數(shù)據(jù)。為避免數(shù)據(jù)的不一致性,應(yīng)將方法聲明為同步方法,對數(shù)據(jù)進(jìn)行加鎖,以保證線程的安全。詳細(xì)內(nèi)容請參考第8章。 5throws 異常類型l 程序在運(yùn)行時(shí)可能發(fā)生異?,F(xiàn)象。每一個(gè)異常都對應(yīng)著一個(gè)異常類,如果希望方法忽略某種異常,可

17、將其拋出,使程序得以繼續(xù)運(yùn)行。在前面介紹的例中就使用過拋出異常throws IOException(輸入/輸出異常),有關(guān)異常處理的詳細(xì)內(nèi)容請參考第6章。346返回值類型l Java要求一個(gè)方法必須聲明它的返回值類型。如果方法沒有返回值就用關(guān)鍵字void作為返回值類型,否則應(yīng)使用基本數(shù)據(jù)類型或?qū)ο箢愋驼f明返回值類型,如下面的語句: public int getX(); void setXY(int x, int y); public String getName(); protected Object clone();l 其中,getX的返回值為int類型,setXY沒有返回值,getName

18、的返回值是String類。而clone的返回值則為Object類。357方法名l 方法名可以是任何有效的方法名可以是任何有效的Java標(biāo)識符。方法標(biāo)識符。方法名可以和成員變量同名,也可以和成員方法名可以和成員變量同名,也可以和成員方法同名。同一個(gè)類中的方法同名現(xiàn)象在同名。同一個(gè)類中的方法同名現(xiàn)象在OOP中中稱為方法重載(稱為方法重載(overload),重載使一個(gè)類),重載使一個(gè)類的多個(gè)方法享有同一個(gè)名稱,可以減輕程序的多個(gè)方法享有同一個(gè)名稱,可以減輕程序員的負(fù)擔(dān)。員的負(fù)擔(dān)。 8參數(shù)表l 方法的調(diào)用者正是通過參數(shù)表將外部消息傳方法的調(diào)用者正是通過參數(shù)表將外部消息傳遞給方法加以處理的。在參數(shù)表中

19、要聲明參遞給方法加以處理的。在參數(shù)表中要聲明參數(shù)的類型,并用逗號分隔多個(gè)參數(shù)。數(shù)的類型,并用逗號分隔多個(gè)參數(shù)。364.4.3 方法體方法體l方法體包含在一對大括號中,即使方法體中沒有語句,一對大括號也是必不可少的。使用各種語句結(jié)構(gòu)組成方法主體,實(shí)現(xiàn)程序的功能,是設(shè)計(jì)方法體的目的。下面這段程序是一個(gè)處理格式化字符串的方法: public String toString(int arr) int i, n=arr.size(); StringBuffer s=new StringBuffer();37 s.append(); for (i=0; in; i+) s.append (Integer.

20、toString(arri); if (in-1) s.append(,); s.append(); return s.toString();384.4.4 消息傳遞消息傳遞l 一個(gè)對象和外部交換信息主要靠方法的參數(shù)來傳遞。當(dāng)然,如果允許的話,外部對象也可以直接存取一個(gè)對象的成員變量。出于整體考慮,大部分還是通過參數(shù)來傳遞。在Java中,可傳遞的參數(shù)包括任何數(shù)據(jù)類型,前面已經(jīng)使用了基本數(shù)據(jù)類型的參數(shù)傳遞、數(shù)組的傳遞和對象的傳遞。 l 在其它語言中,函數(shù)調(diào)用或過程調(diào)用有傳值調(diào)用和傳地址調(diào)用之分。 39例4.7 參數(shù)傳遞示例1class P1 public static void main(Str

21、ing args) int x=10, y=10; doPower(x, y); System.out.println(x=+x+, y=+y); static void doPower(int passX, int passY) passX=passX*passX; passY=passY*passY; System.out.println(passX=+passX+, passY=+passY); 40例4.8 參數(shù)傳遞示例2 class P2 public static void main(String args) Power p=new Power(); p.doPower(10,10

22、); System.out.println(x=+p.x+, y=+p.y); class Power int x, y; void doPower(int passX, int passY) x=passX*passX; y=passY*passY; 414.4.5 Java編程小結(jié)編程小結(jié)l 源程序的文件名和程序中定義的主類名應(yīng)保持一致,包括字母大小寫的匹配。l Java嚴(yán)格區(qū)分大小寫,例如applet和Applet代表了不同的含義。l 語句以分號結(jié)束。l 程序中可加注釋,用雙斜杠“/”引導(dǎo),“/* */”可包含多行注釋。l 注意設(shè)計(jì)一般類與主類,一般類可以有多個(gè),主類只能有一個(gè),源程序名與主類名相同。

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!