版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)(下),類變量(靜態(tài)變量),類變量——為類的各實(shí)例共享的變量。 static 靜態(tài)變量 ; 位于類的內(nèi)存區(qū)域中,為該類的各個(gè)對(duì)象共享.無此限定符的變量是實(shí)例變量。 class ex { int i ; static int j ; static final int k=10 ; --- }為節(jié)省空間, final 常量可同時(shí) 定義為stat
2、ic,類exjk=10,對(duì)象1i : 3,對(duì)象2i : 5,類變量(靜態(tài)變量),實(shí)現(xiàn)各實(shí)例之間的通訊。跟蹤創(chuàng)建的實(shí)例數(shù)。 public class Count { private int serial ; //成員變量 private static int counter = 0 ; //類變量 public Count(
3、) { counter++; serial = counter ; } }靜態(tài)變量類似于某些語言中的全局變量。,類變量(靜態(tài)變量),非private 的靜態(tài)變量無須創(chuàng)建實(shí)例就可以從類的外部訪問。 public class StaticVar { public static int x ; } public class test { pu
4、blic void m() { int m = StaticVar.x ; } },1,類變量(靜態(tài)變量),class PhoneCard200{static final String connectNumber = “200”;static double additoryFee;long cardNumber ;int password;boolean connected;
5、double balance;…},2,類變量(靜態(tài)變量),public class a {public static void main(String args[]) {PhoneCard200 my200_1 = new PhoneCard200();PhoneCard200 my200_2 = new PhoneCard200(); PhoneCard200.additoryFee = 0.1;Syst
6、em.out.println(“第一張200卡的接入號(hào)碼:” + my200_1.connectNumber);System.out.println(“200卡接入號(hào)碼:” + PhoneCard200.connectNumber);System.out.pri
7、ntln(“第二張200卡的附加費(fèi): ” + my200_2.additoryFee);System.out.println(“200卡類的附加費(fèi):” + PhoneCard200.additoryFee);}
8、 },類方法( 靜態(tài)方法),類方法: static 方法名(…) { …}使用類方法不用創(chuàng)建類的對(duì)象。調(diào)用這個(gè)方法時(shí),應(yīng)該使用類名做前綴,而不是某一個(gè)具體的對(duì)象名。非static的方法是對(duì)象方法(或稱實(shí)例方法)。類方法中不能訪問實(shí)例變量,而只能訪問類變量(static方法 — static域)和自己的方法參數(shù)。 類方法中不能直接使用本類中的實(shí)例方法,只能使用其他的static方法。類方法中沒有this值。,,類方法( 靜
9、態(tài)方法),public class a { public static void main(String[] args){ System.out.println(Math.round(3.54)); String s = to_char(2.718); System.out.println(“e=“ + s ); } static String to_char(double x) {
10、 return Double.toString(x); }},3,類方法( 靜態(tài)方法),main方法是靜態(tài)方法,這是為了系統(tǒng)在沒有任何實(shí)例化對(duì)象之前可以運(yùn)行一個(gè)應(yīng)用程序。如果main方法要調(diào)用本類的其它方法:將這些方法設(shè)計(jì)成靜態(tài)方法,創(chuàng)建對(duì)象,使用對(duì)象方法。一個(gè)靜態(tài)方法不能被一個(gè)非靜態(tài)方法所覆蓋。,類的初始化-靜態(tài)初始化器,由關(guān)鍵字static引導(dǎo)的一對(duì)大括號(hào)括起的語句組。用來完成類的初始化的工作,與構(gòu)造方法的區(qū)別:構(gòu)
11、造方法是對(duì)每個(gè)新創(chuàng)建的對(duì)象初始化,而靜態(tài)初始化器是對(duì)類自身進(jìn)行初始化;構(gòu)造方法是在用new運(yùn)算符產(chǎn)生新對(duì)象時(shí)由系統(tǒng)自動(dòng)執(zhí)行,而靜態(tài)初始化器則是在它所屬的類加載入內(nèi)存時(shí)由系統(tǒng)調(diào)用執(zhí)行;不同于構(gòu)造方法,靜態(tài)初始化器不是方法,沒有方法名、返回值和參數(shù)列表。,4,小結(jié)—類與對(duì)象,面向?qū)ο蟮臄?shù)據(jù)和方法:一個(gè)類的對(duì)象雖然具有相同的屬性,但對(duì)象卻各不相同(屬性值不同)。一個(gè)類的對(duì)象方法雖然具有相同的代碼,但表現(xiàn)不同,因?yàn)榉椒ㄋ僮鞯膶?duì)象(數(shù)據(jù)
12、)不同。共享的數(shù)據(jù)和方法:類屬性 — 在同一類的實(shí)例中共享數(shù)據(jù)(該數(shù)據(jù)不屬于一個(gè)對(duì)象,而屬于一個(gè)類)。類方法 — 不需要實(shí)例就能使用靜態(tài)的方法和數(shù)據(jù),雖然它們也能通過實(shí)例來訪問。,小結(jié)—類與對(duì)象,類名.域名 靜態(tài)域,在類的空間里,是該類對(duì)象共享的單元 類名.方法名 靜態(tài)方法 — 類方法的調(diào)用 類方法及域也可以用對(duì)象名調(diào)用,但最好用類名對(duì)象名.屬性名 實(shí)例變量 。提倡通過方法操作屬性。對(duì)象名.方法名
13、 方法調(diào)用又稱“消息傳遞”,實(shí)際上就是給指定對(duì)象發(fā)送消息:告訴它做什么,向它要信息(方法的返回值)。,,小結(jié)—類與對(duì)象,訪問一個(gè)類:創(chuàng)建該類的對(duì)象,并使用該類對(duì)象的可見屬性與方法。調(diào)用該類的可見靜態(tài)方法,訪問該類的可見靜態(tài)屬性。繼承該類。finalfinal類不能被繼承。final 方法不能被覆蓋。final 域不能被修改。,包(package),在操作系統(tǒng)中,目錄用來組織文件,設(shè)置權(quán)限。Java利用包來組織相關(guān)的
14、類,并控制訪問權(quán)限。包是一種松散的類的集合。一般不要求處于同一個(gè)包中的類有明確的相互關(guān)系,如包含、繼承等等。由于同一包中的類在缺省情況下可以互相訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個(gè)包里。 利用包來管理類,可實(shí)現(xiàn)類的共享與復(fù)用(類庫(kù))。,編譯單元,一個(gè)java源代碼文件稱之為一個(gè)編譯單元。一個(gè)編譯單元中只能有一個(gè)public類,該類名與文件名相同。編譯單元中的其他類是該主public類的支撐類。經(jīng)過編譯
15、,編譯單元中的每個(gè)類都產(chǎn)生一個(gè) .class文件。java的工作程序是一串.class文件, JAVA解釋器負(fù)責(zé)尋找、加載和解釋這些文件。 (不象其它語言最終生成一個(gè).exe的可執(zhí)行文件),類的名字空間,所有類成員的名字都是相互隔離的。類A中的方法m1與類B中的方法m1互不相干,但類名就有沖突的問題了。 在一個(gè)Java程序運(yùn)行過程中,某些類會(huì)從internet上自動(dòng)下載,而用戶并不知曉。所以在java中需要名字空間的完全
16、控制,以便可以建立一個(gè)唯一的類名。包用于類的名字空間管理。作為包的設(shè)計(jì)人員,利用包來劃分名字空間以避免類名沖突(package 和 import),包與目錄,一個(gè)包要放在指定目錄下。classpath 指定搜尋包的路徑。一個(gè)包可以包含若干個(gè)類文件,還可包含若干包。包名本身又對(duì)應(yīng)一個(gè)目錄(用一個(gè)目錄表示)。包名可以有層次,以小數(shù)點(diǎn)分割。包名一般全小寫(類名第一個(gè)字母大寫) 。,p3,p2,d1,d2,,,,,,,,,,,,,,,
17、,,,,類,,classpath =d:\d1; d:\d1\d2,,p1,,包,,編譯單元與包,對(duì)象三步曲:打開包(import,package)加載類(程序中只有類定義的一份拷貝)建對(duì)象(用new運(yùn)算符可以創(chuàng)建一個(gè)類的若干實(shí)例),編譯單元,當(dāng)前包 package,其他包,,其他包 import,,編譯單元與當(dāng)前包,顯式指定編譯單元的當(dāng)前包。 package 包名 ; 編譯單元對(duì)當(dāng)前包可以讀寫。在一個(gè)編譯單元中
18、,只能有一個(gè)package語句,且為第一個(gè)語句。如果編譯單元中無package語句,則隱含的當(dāng)前包是一個(gè)無名包(放在當(dāng)前目錄下)。無名包中 的類是為了局部應(yīng)用。不管“當(dāng)前包”是顯式指定還是采用隱含值,總是當(dāng)前名字空間的一部分。,使用其他包中的類,import語句將指定包中的類引入當(dāng)前的名字空間,即告訴編譯到哪去找程序中使用的類。import語句不加載包中的類。 import語句必須出現(xiàn)在所有類定義之前。例:import j
19、ava.util.* ; 該語句引入整個(gè)utility 類庫(kù)(標(biāo)準(zhǔn)Java庫(kù)的一部分) 例:import java.util.Vector ; 該語句只引入Vector類,但utility類庫(kù)中的其他類不可用。,從包中加載類,當(dāng)程序需要建立一個(gè)類的對(duì)象,或是第一次訪問類的靜態(tài)成員時(shí),會(huì)動(dòng)態(tài)加載類文件。JAVA解釋器加載類過程:將環(huán)境變量CLASSPATH包含的一個(gè)或多個(gè)目錄作為起始目錄。解釋器取出包名,將小數(shù)
20、點(diǎn)換成斜杠,產(chǎn)生以CLASSPATH目錄為起點(diǎn)的查找路徑。查找目錄下的 .class文件import p1.p2.* 轉(zhuǎn)換為 p1\p2\*.class 或 p1/p2/*.class (取決于操作系統(tǒng)),創(chuàng)建包、添加類,package mypk ;public class myc{…},javac –d d:\ myc.java 會(huì)在指定目錄下建包,import mypk.* ;public cla
21、ss testa { public static void main(String args[]) { myc c = new myc() ; …. },set CLASSPATH=.;d:\; %CLASSPATH%,5,jar文件,jar cf j.jar *.class 建立jar文件jar tf j.jar
22、60; 列表jar文件java -cp j.jar test 執(zhí)行jar文件中的類,,訪問控制符,訪問控制符是一組起到限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修飾符 。類訪問控制符公共類 :public 類名 一般類一個(gè)包中的類只能訪問另一個(gè)包中的public類。一般類只能在同一包中
23、使用,一個(gè)包中的類不用說明可相互訪問。把常在一起協(xié)同工作的類放在一個(gè)包里是很自然的。,一個(gè)類作為整體對(duì)程序的其他部分可見,并不能代表類內(nèi)的所有域和方法也同時(shí)對(duì)程序的其他部分可見,前者只是后者的必要條件 域和方法的可見性,域和方法的訪問限定符,6,域和方法的訪問限定符,為了使對(duì)象具有良好的封裝性,一般將類的實(shí)例變量設(shè)計(jì)成私有。為了使其它類或?qū)ο竽軌蛟L問私有實(shí)例變量,本類必須提供訪問私有變量的方法(公共方法)。按照慣例,讀私有變量的
24、方法取名為get… 寫私有變量的方法取名為 set…,接口,“接口”是抽象類的概念。接口中的方法都是沒有方法體的抽象方法。接口中只能定義 static final 屬性 。接口定義的僅僅是實(shí)現(xiàn)某一特定功能的一組方法的對(duì)外接口和規(guī)范,而并沒有真正地實(shí)現(xiàn)這個(gè)功能。接口的功能實(shí)現(xiàn)是在“繼承”了這個(gè)接口的各個(gè)類中完成的,由這些類來具體定義接口中所有抽象方法的方法體。通常把對(duì)接口的“繼承”稱為“實(shí)現(xiàn)”。,接口的實(shí)現(xiàn),Obje
25、ct,類,Abstract class,,,,class,final class,,,,,接口,,,class,,java—單重繼承,繼承,實(shí)現(xiàn),接口的定義,public interface 接口名 [extends 父接口名列表] { // 常量域聲明 public static final 域類型 域名 = 常量值; // 抽象方法聲明 public abstract
26、返回值類型 方法名( 參數(shù)列表 ) ; }接口是由常量和抽象方法組成的特殊類。,,,接口的實(shí)現(xiàn),public class MyApplet extends Applet implements Runnable , MouseListener { … … }一個(gè)類只能有一個(gè)父類,但是它可以同時(shí)實(shí)現(xiàn)若干個(gè)接口。如果把接口理解成特殊的類,那么這個(gè)類利用接口實(shí)際上就獲得了多個(gè)父類,即實(shí)現(xiàn)了多繼承。
27、instanceof 運(yùn)算符可用來判斷一個(gè)對(duì)象的類是否實(shí)現(xiàn)了某個(gè)接口。,接口例,interface CalArea { double pi = 3.14 ; double cal(double r) ;}class a implements CalArea { public double cal(double r) { return pi * r *r ; }},7,接口的規(guī)定,類定義
28、中使用 implements 指定實(shí)現(xiàn)某一接口類中必須具體實(shí)現(xiàn)該 interface 中定義的抽象方法。實(shí)現(xiàn)的方法必須指定為public限定符。實(shí)現(xiàn)接口的類要實(shí)現(xiàn)接口的全部方法。如果不需要某個(gè)方法,也要定義成一個(gè)空方法體的方法。 Public 方法名() { },接口的應(yīng)用,聲明多個(gè)類必須實(shí)現(xiàn)的方法。編程者可以把用于完成特定功能的方法組織成相對(duì)獨(dú)立的集合體—接口。凡是需要實(shí)現(xiàn)這種特定功能的類,都必須實(shí)現(xiàn)這個(gè)接口。利
29、用接口模擬多繼承。java程序中的類層次結(jié)構(gòu)是樹狀結(jié)構(gòu),這種樹狀結(jié)構(gòu)在處理某些復(fù)雜問題時(shí)會(huì)顯得力不從心。接口在保持單繼承優(yōu)點(diǎn)的前提下,使Java程序的類層次結(jié)構(gòu)更加合理,更符合實(shí)際情況。只說明對(duì)象的編程接口,而不揭示實(shí)際的類體。類庫(kù)分發(fā),系統(tǒng)定義的接口,public interface ActionListener extends EventListener{ public abstract void acti
30、onPerformed(ActionEvent e);}該接口代表了監(jiān)聽并處理動(dòng)作事件的功能,它包含了一個(gè)抽象方法 actionPerformed所有希望能夠處理動(dòng)作事件(如單擊按鈕、在文本框中回車等)的類都必須具有ActionListener接口定義的功能,也就是要實(shí)現(xiàn)這個(gè)接口,,內(nèi)部類(inner class),在某個(gè)類的內(nèi)部定義的類稱之內(nèi)部類。內(nèi)部類的定義方法定義命名的內(nèi)部類:可以在類中(甚至方法中)定義內(nèi)部類,并在類的
31、內(nèi)部多次使用(創(chuàng)建多個(gè)對(duì)象)。定義匿名內(nèi)部類(一次性使用):可以在new關(guān)鍵字后定義內(nèi)部類,并立即創(chuàng)建一個(gè)對(duì)象內(nèi)部類的類文件命名方法設(shè)外層類名為Myclass,則該類的內(nèi)部類名為:Myclass$c1.class (c1 為命名內(nèi)部類名)Myclass$1.class (表示類中定義的第一個(gè)匿名內(nèi)部類),類中的內(nèi)部類,在類中如同使用其他類一樣使用自己的內(nèi)部類。內(nèi)部類擁有對(duì)在外層類中定義的所有屬性和方
32、法的訪問權(quán)。其他類如果要使用一個(gè)類的內(nèi)部類時(shí),要使用類前綴。,8-Parcel2,類中的內(nèi)部類,一般類只能是public和非public,而內(nèi)部類可以指定為 private 和 protected。如果內(nèi)部類為private,只有本類可以使用它。如果內(nèi)部類為protected,只有外層類、與外層類處于同一包中的類、以及外層類的子類可以訪問它。內(nèi)部類可以實(shí)現(xiàn)接口及抽象類中的抽象方法。外層類可以將上述實(shí)現(xiàn)細(xì)節(jié)、乃至內(nèi)部類都隱藏起來
33、,給外界提供一個(gè)指向基類及接口的處理句柄。,8-Parcel3,方法中的內(nèi)部類,內(nèi)部類還可以定義在一個(gè)方法里,其作用域僅限于該方法的范圍內(nèi)(進(jìn)一步隱藏),在其它方法里定義也沒有名字沖突問題。實(shí)現(xiàn)一個(gè)接口,但只返回一個(gè)句柄在一編寫好的代碼中加一個(gè)類,但又不想公開化。,8-Parcel4,條件分支中的內(nèi)部類,在條件分支中的內(nèi)部類并不表示有條件的建立,同其他類一樣,在編譯時(shí)就一道解決了,內(nèi)部類只是限定它的作用域(在條件分支中使用)。
34、 if (e) {類定義},8-Parcel5,實(shí)現(xiàn)接口的無名內(nèi)部類,return new Contents() { //調(diào)用隱含構(gòu)造函數(shù) private int i = 11; //Contents是接口 public int value() { return i; } };
35、 //分號(hào)表示表達(dá)式的結(jié)束該語句將返回值同表示返回值類型的類定義結(jié)合在一起。它相當(dāng)于:class MyContents implements Contents { private int i = 11; public int value() { return i; } } return new MyContents();,8-Parcel6,有名內(nèi)部類例,public class MyFrame extends Fra
36、me { … button1.addActionListener( new Button1Adapter()); … class Button1Adapter implements ActionListener { public void actionPerformed(ActionEvent e) {
37、 …. } } // end of Button1Adapter class} // end of Frame1 class,匿名內(nèi)部類例,匿名類可實(shí)例化一個(gè)接口 button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { …. }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》
- 面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)
- 實(shí)驗(yàn) 面向?qū)ο蟪绦蛟O(shè)計(jì)
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》 考試
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)(java)》
- 面向?qū)ο蟪绦蛟O(shè)計(jì)報(bào)告
- 面向?qū)ο蟮某绦蛟O(shè)計(jì)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)理論
- 一面向?qū)ο蟪绦蛟O(shè)計(jì)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)的概念
- 面向?qū)ο蠓椒俺绦蛟O(shè)計(jì)
- c++面向?qū)ο蟪绦蛟O(shè)計(jì)
- java面向?qū)ο蟪绦蛟O(shè)計(jì)教案
- 課題面向?qū)ο蟮某绦蛟O(shè)計(jì)
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》輔導(dǎo)四
- [0837]作業(yè)《面向?qū)ο蟪绦蛟O(shè)計(jì)》
- 面向?qū)ο蟮恼Z言程序設(shè)計(jì)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)異常處理
- 第六章面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)
評(píng)論
0/150
提交評(píng)論