第八講Java 高級(jí)語(yǔ)言特征_第1頁(yè)
第八講Java 高級(jí)語(yǔ)言特征_第2頁(yè)
第八講Java 高級(jí)語(yǔ)言特征_第3頁(yè)
第八講Java 高級(jí)語(yǔ)言特征_第4頁(yè)
第八講Java 高級(jí)語(yǔ)言特征_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八講 Java 高級(jí)語(yǔ)言特征靜態(tài)變量、方法與初始化程序塊 final 抽象類(lèi) Interface package訪(fǎng)問(wèn)控制內(nèi)部類(lèi)其它1類(lèi)變量(static /class variable)在該類(lèi)所有實(shí)例之間是共享的。在加載該類(lèi)時(shí),只分配一次空間,并初始化。例:class Employee static int com ;則運(yùn)行時(shí),comcomcomcome1e2e32類(lèi)變量(static /class variable)類(lèi)變量可用來(lái)在實(shí)例之間進(jìn)行通信或跟蹤該類(lèi)實(shí)例的數(shù)目。例:public class Countprivate int serialNumber ;private static i

2、nt counter = 0 ;public Count( )counter+ ;serialNumber = counter ;3類(lèi)變量可以是public 或private對(duì)于public 類(lèi)型的類(lèi)變量,可以在類(lèi)外直接用類(lèi)名調(diào)用而不需要初始化。 Public class StaticVarpublic static int number ;public class Otherclasspublic void method()int x = StaticVar.number ;類(lèi)變量(static /class variable)4類(lèi)(class/static)方法可以直接被調(diào)用,而不需要生成

3、任何實(shí)例public class GeneralFunctionpublic static int addUp(int x, int y)return x+y ;public calss UseGeneralpublic void method()int c = GeneralFunction.addUp(9,10);5 靜態(tài)初始化程序沒(méi)有存在于任何方法體中的靜態(tài)語(yǔ)句塊。在加載該類(lèi)時(shí)執(zhí)行且只執(zhí)行一次。public Class StaticInitDemostatic int i=5; static System.out.println(“Static code: i=”+i+);public

4、class Test public static void main(String args)System.out.println(“ Main code: i=”+StaticInitDemo.i);Static code: i=5Main code: i = 66Final 關(guān)鍵字 被定義成final的類(lèi)不能有子類(lèi)。例: final class Employee class Manager extends Employee 被定義成final 的成員方法不能被重寫(xiě)。被定義成final的成員變量不能改變。該變量實(shí)際上是常量,一般大寫(xiě),并賦值。 final int NUMBER = 100;7

5、抽象類(lèi)一個(gè)類(lèi)如果只聲明方法而沒(méi)有方法的實(shí)現(xiàn),則稱(chēng)為抽象類(lèi)。必須在聲明中增加 abstract 關(guān)鍵字,在無(wú)方法體的方法前 也要加上abstract。Public abstract class Drawingpublic abstract void drawDot( int x, int y);public void drawLine(int x1, int y1, int x2,int y2)./ 調(diào)用drawDot()方法抽象類(lèi)也可有普通的成員變量或方法。8抽象類(lèi)抽象類(lèi)不能直接用來(lái)生成實(shí)例。一般可通過(guò)定義子類(lèi)進(jìn)行實(shí)例化。 可以定義抽象類(lèi)的變量,該變量可以指向具體的一個(gè)子類(lèi)的實(shí)例。Abstra

6、ct class Employeeabstract void raiseSalary(int i) ;class Manager extends Employeevoid raiseSalary(int i ) .Employee e = new Manager( ) ;9抽象類(lèi)的作用使類(lèi)的設(shè)計(jì)變得清晰為類(lèi)的體系提供通用接口,并支持多態(tài)。10接口 interface Interface 是在抽象類(lèi)概念的基礎(chǔ)上演變而來(lái)的。一個(gè)interface所有成員方法都是抽象的,并且只能定義 static final 成員變量。11接口的定義接口聲明 接口體接口聲明的格式如下:public interfac

7、e 接口名 extends 接口列表接口體包含常量定義和方法聲明兩部分接口中定義的常量默認(rèn)具有public,final,static屬性。定義格式為: type NAME=value;接口中生命的方法默認(rèn)具有public,abstract屬性。定義格式為: returnType methodName(paralist);12Interface 的含義 interface定義了一組行為的協(xié)議。實(shí)現(xiàn)一個(gè)接口的類(lèi)將具有該接口規(guī)定的行為,外界可以通過(guò)這些接口與該類(lèi)的對(duì)象通信。 interface 不屬于類(lèi)層次結(jié)構(gòu)。不相關(guān)的類(lèi)可以實(shí)現(xiàn)相同的接口。13interfaceFlyerVehicleinterf

8、aceSailerdock ( )cruise ( )Airplanetakeoff ( )land ( )fly ( )RiverBargedock ( )cruise ( )takeoff ( )land ( )fly ( )SeaPlanedock ( )cruise ( )HelicopterInterface 示例14用implements代替extends聲明類(lèi),該類(lèi)中可以使用接口中定義的常量,而且必須實(shí)現(xiàn)接口(及其父接口)中的所有方法。例:interface SayHello void printMessage( ); class SayHelloImpl implements

9、SayHellovoid printMessage( )System.out.println(“Hello”);實(shí)現(xiàn)interface15Interface的使用Interface可以作為一種數(shù)據(jù)類(lèi)型使用。如:public class StockMonitor public void watchStock(StockWatcher watcher, String tickerSymbol, double delta) . Watcher是一個(gè)實(shí)現(xiàn)了StockWatcher接口的類(lèi)的對(duì)象16問(wèn)題:如何增加接口的方法同時(shí)避免對(duì)原有程序的修改?不應(yīng)該向interface定義中隨意增加方法。publi

10、c interface StockWatcher final String sunTicker = SUNW; final String oracleTicker = ORCL; final String ciscoTicker = CSCO; void valueChanged(String tickerSymbol, double newValue); void currentValue(String tickerSymbol, double newValue); 一種好的辦法是public interface StockTracker extends StockWatcher void

11、currentValue(String tickerSymbol, double newValue);為什么?17問(wèn)題:如何將多個(gè)接口合并為一個(gè)接口? 答案:定義一個(gè)子接口,該子接口繼承所有要合并的接口。 public interface 接口名 extends 接口列表18可以通過(guò)實(shí)現(xiàn)接口實(shí)現(xiàn)多重繼承:一個(gè)類(lèi)可只繼承一個(gè)父類(lèi),并實(shí)現(xiàn)多個(gè)接口。interface I1 ;interface I2 ;class E . ;class M extends E implements I1,I2 一個(gè)interface 可作為類(lèi)名使用,實(shí)現(xiàn)多態(tài)。接口 interfaceInterface Human

12、class Chinese implements Human class Japanese implements Human.Human e = new Chinese( ); Human e = new Japanese( );19接口與抽象類(lèi)接口與抽象類(lèi)的異同?使用接口的優(yōu)勢(shì)實(shí)現(xiàn)多重繼承,從而可以使子類(lèi)對(duì)象上溯造型為多個(gè)基礎(chǔ)類(lèi)型??梢园裺eaPlane當(dāng)sailer用,也可以當(dāng)flyer用??沙橄蟪霾幌嚓P(guān)類(lèi)之間的相似性,而不會(huì)形成類(lèi)的繼承關(guān)系。在什么情況下使用接口?什么情況下使用抽象類(lèi)?20類(lèi)分組 package 語(yǔ)句包(package)是相關(guān)類(lèi)與接口的一個(gè)集合,可以通過(guò)包進(jìn)行訪(fǎng)問(wèn)控制與命

13、名空間管理(避免命名沖突)。 Java平臺(tái)中的類(lèi)與接口都是根據(jù)功能以包組織的。包機(jī)制的好處:程序員容易確定包中的類(lèi)是相關(guān)的,并且容易根據(jù)所需的功能找到相應(yīng)的類(lèi)。每個(gè)包都創(chuàng)建一個(gè)新的命名空間,因此不同包中的類(lèi)名不會(huì)沖突。同一個(gè)包中的類(lèi)之間有比較寬松的訪(fǎng)問(wèn)控制。21創(chuàng)建包用package語(yǔ)句指定源文件中的類(lèi)屬于一個(gè)特定包: package 包名 包定義語(yǔ)句在每個(gè)源程序中只能有一條, 即一個(gè)類(lèi)只能屬 于一個(gè)包。包定義語(yǔ)句必須在程序的第一行(之前可有空格及注釋?zhuān)0谩?” 分隔。22包中成員的使用有三種方法(假設(shè)包graphics中定義了類(lèi)Circle)用長(zhǎng)名:包名.包中的成員名graphics.

14、Circle myCircle=new graphics.Circle(); 引入包中的成員:import 包名.包中的成員名import graphics.Circle;Circle myCircle=new Circle();引入整個(gè)包:import 包名import graphics.*Circle myCircle=new Circle();23包名與包中類(lèi)的存儲(chǔ)位置包分隔符相當(dāng)于目錄分隔符,包存儲(chǔ)的路徑由包根路徑加上包名指明的路徑組成。包的根路徑由CLASSPATH環(huán)境變量指出。%CLASSPATH%abc financeDept24源文件(.java)與類(lèi)文件(.class)的管理

15、源文件可以按照包名指明的路徑放置。如 類(lèi)文件也應(yīng)該放在反映包名的一系列目錄下。25一般將源文件與類(lèi)文件分別存放,可采用如下方式:源文件(.java)與類(lèi)文件(.class)的管理示例26高級(jí)訪(fǎng)問(wèn)控制成員變量和方法有4種訪(fǎng)問(wèn)級(jí)別:public, protected, default(package), private ;類(lèi)有兩種訪(fǎng)問(wèn)級(jí)別:public 或default。修飾符的作用范圍:Modifier Same class Same Package Subclass Universepublic Yes YesYes Yesprotected Yes Yes Yesdefault Yes Ye

16、sprivate Yes27class Alpha private int iamprivate; private void privateMethod() System.out.println(privateMethod); class Beta void accessMethod() Alpha a = new Alpha(); a.iamprivate = 10; a.privateMethod(); 高級(jí)訪(fǎng)問(wèn)控制-private/ illegal/ illegal28class Alpha private int iamprivate; boolean isEqualTo(Alpha

17、anotherAlpha) if (this.iamprivate = anotherAlpha.iamprivate) return true; else return false; 高級(jí)訪(fǎng)問(wèn)控制注意:訪(fǎng)問(wèn)控制應(yīng)用于class或type 層次,而不是對(duì)象層次。29允許類(lèi)本身、它的子類(lèi)、以及同一個(gè)包中其余的類(lèi)訪(fǎng)問(wèn)這些成員。package Greek; public class Alpha protected int iamprotected; protected void protectedMethod() System.out.println(protectedMethod); packag

18、e Greek; class Gamma void accessMethod() Alpha a = new Alpha(); a.iamprotected = 10; tectedMethod(); 高級(jí)訪(fǎng)問(wèn)控制protected/ legal/ legal30package Latin; import Greek.*; class Delta extends Alpha void accessMethod(Alpha a, Delta d) a.iamprotected = 10; d.iamprotected = 10; tectedMethod(); te

19、ctedMethod(); 高級(jí)訪(fǎng)問(wèn)控制protectedXX31package Greek; class Alpha int iampackage; void packageMethod() System.out.println(packageMethod); package Greek; class Beta void accessMethod() Alpha a = new Alpha(); a.iampackage = 10; a.packageMethod(); 高級(jí)訪(fǎng)問(wèn)控制package32內(nèi)部類(lèi)內(nèi)部類(lèi)是在一個(gè)類(lèi)的聲明里聲明的類(lèi)。Class A class B 內(nèi)部類(lèi)可作為類(lèi)的一個(gè)

20、成員使用。一般只在包容類(lèi)中調(diào)用。內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外包類(lèi)的所有成員。例5-833內(nèi)部類(lèi)的定義和使用內(nèi)部類(lèi)是在一個(gè)類(lèi)的內(nèi)部嵌套定義的類(lèi),它可以是其它類(lèi)的成員,也可以在一個(gè)語(yǔ)句塊的內(nèi)部定義,還可以在表達(dá)式內(nèi)部匿名定義。內(nèi)部類(lèi)有如下特性:一般用在定義它的類(lèi)或語(yǔ)句塊之內(nèi),在外部引用它時(shí)必須給出帶有外包類(lèi)的完整名稱(chēng).內(nèi)部類(lèi)的名字不能與包含它的類(lèi)名相同。內(nèi)部類(lèi)可以訪(fǎng)問(wèn)包含它的類(lèi)的靜態(tài)和實(shí)例成員變量?jī)?nèi)部類(lèi)可以在成員方法中定義,該成員方法的局部變量和參數(shù)必須是final的才能被該內(nèi)部類(lèi)使用。內(nèi)部類(lèi)可以定義為abstract,或接口。如果是接口,可以由其他內(nèi)部類(lèi)實(shí)現(xiàn)。內(nèi)部類(lèi)可以使用public,default,pr

21、ivate或protected訪(fǎng)問(wèn)權(quán)限控制。內(nèi)部類(lèi)可以被聲明為static,這樣就變成了頂層類(lèi)(不再是嵌套的內(nèi)部類(lèi)),不能再引用外包類(lèi)對(duì)象。若想在內(nèi)部類(lèi)中聲明任何static成員,則該內(nèi)部類(lèi)必須聲明為static,因?yàn)橹挥许攲宇?lèi)可以聲明static成員。34內(nèi)部類(lèi)示例外包類(lèi),內(nèi)部類(lèi)和內(nèi)部類(lèi)方法中同名變量的標(biāo)識(shí)例5-9在語(yǔ)句塊中定義內(nèi)部類(lèi)訪(fǎng)問(wèn)語(yǔ)句塊的局部變量 例5-10在外包類(lèi)以外的其他類(lèi)中訪(fǎng)問(wèn)內(nèi)部類(lèi) 例5-1135Wrapper類(lèi) Wrapper將基本類(lèi)型表示成類(lèi)。每個(gè)wrapper類(lèi)對(duì)象都封裝了基本類(lèi)型的一個(gè)值。Primitive Data Type Wrapper Classboolean

22、BooleanbyteBytecharCharactershortShortint IntegerlongLongfloatFloatdoubleDouble36Wrapper類(lèi) Wrapper類(lèi)中包含了很多有用的方法和常量。 如數(shù)字型Wrapper類(lèi)中的MIN_VALUE 和 MAX_VALUE 常量,定義了該類(lèi)型的最大值與最小值。byteValue, shortValue方法進(jìn)行數(shù)值轉(zhuǎn)換,valueOf 和 toString 實(shí)現(xiàn)字符串與數(shù)值之間的轉(zhuǎn)換。例:Wrapper類(lèi)對(duì)象的創(chuàng)建:Integer quantity = new Integer(123456);Double amount

23、= new Double(345987.246);37Wrapper類(lèi)例:利用Wrapper類(lèi)Integer的parseInt方法,將字符串轉(zhuǎn)換為整數(shù) public static int parseInt(Strings) throws NumberFormatException 請(qǐng)大家回去自己仔細(xì)研究其它包裝類(lèi)。38Collection API - 集合類(lèi)一個(gè)集合類(lèi)對(duì)象表示了一組對(duì)象,相當(dāng)于一個(gè)容器。39Set Set不能包含重復(fù)的元素。三種Set實(shí)現(xiàn):HashSet和TreeSet和LinkedHashSet Set 接口定義:public interface Set / Basic Op

24、erations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); / Optional boolean remove(Object element); / Optional Iterator iterator(); Set的使用示例40List List是有序的集合,元素可以重復(fù)。 List接口定義:public interface List extends Collection / Positional Access Object get(int ind

25、ex); Object set(int index, Object element); / Optional void add(int index, Object element); / Optional Object remove(int index); / Optional abstract boolean addAll(int index, Collection c); / Optional / Search int indexOf(Object o); int lastIndexOf(Object o); List的實(shí)現(xiàn): ArrayList, LinkedList,Vector示例41MapMap把鍵值映射到某個(gè)值。一個(gè)鍵值最多只能映射一個(gè)值。Map 接口定義:public interface Map / Basic Operations Object put(Object key, Object value); Object get(Object ke

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論