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

下載本文檔

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

文檔簡介

1、孟凡超哈爾濱工業(yè)大學(xué)(威海)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2第1章 概述第2章 標(biāo)識(shí)符和數(shù)據(jù)類型第3章 表達(dá)式和流程控制語句第4章 數(shù)組、向量和字符串第5章 進(jìn)一步討論對(duì)象和類第6章 Java語言中的異常第7章 Java的圖形用戶界面設(shè)計(jì)第8章 Swing組件第9章 Java Applet第10章 Java數(shù)據(jù)流第11章 線程第12章 Java網(wǎng)絡(luò)功能35.1 抽象數(shù)據(jù)類型5.2 對(duì)象的構(gòu)造和初始化5.3 this引用5.4 子類5.5 方法重寫5.6 Java包5.7 類成員5.8 關(guān)鍵字final5.9 抽象類5.10 接口5.11 內(nèi)部類4n1 概述概述抽象數(shù)據(jù)類型:抽象數(shù)據(jù)類型:是指基于一個(gè)邏輯

2、類型的是指基于一個(gè)邏輯類型的數(shù)據(jù)類型數(shù)據(jù)類型以及以及這個(gè)個(gè)類型上的一組這個(gè)個(gè)類型上的一組操作操作。public class Date private int day, month, year;/屬性 Date()/構(gòu)造方法 /方法體 Date(int day, int month, int year)/帶參數(shù)構(gòu)造方法 /方法體 Date(Date d)/帶參數(shù)構(gòu)造方法 /方法體 public Date tomorrow()/定義方法 /方法體 Date d=new Date(20,11,1998);d.tomorrow();5n2 定義方法定義方法定義一個(gè)抽象數(shù)據(jù)類型后,還需要為這個(gè)類型的對(duì)象

3、定定義一個(gè)抽象數(shù)據(jù)類型后,還需要為這個(gè)類型的對(duì)象定義相應(yīng)的操作,即方法。義相應(yīng)的操作,即方法。方法定義的格式:方法定義的格式: ()是方法名,它必須使用合法的標(biāo)識(shí)符。說明方法返回值得類型。如果方法不返回任何值,它應(yīng)聲明為void。包括public、protected和private。是傳給方法的參數(shù)表。表示方法體,是實(shí)際執(zhí)行的代碼段。6n3 按值傳遞按值傳遞Java只只“按值按值”傳送自變量,即方法調(diào)用不會(huì)改變自變傳送自變量,即方法調(diào)用不會(huì)改變自變量的值。量的值。當(dāng)當(dāng)對(duì)象實(shí)例對(duì)象實(shí)例作為自變量傳遞給方法時(shí),自變量的值是對(duì)作為自變量傳遞給方法時(shí),自變量的值是對(duì)對(duì)象的引用對(duì)象的引用,也就是說,傳送

4、給方法的是引用值。在方法,也就是說,傳送給方法的是引用值。在方法內(nèi),這個(gè)引用值是不會(huì)被改變的,但可以修改該引用指向內(nèi),這個(gè)引用值是不會(huì)被改變的,但可以修改該引用指向的對(duì)象內(nèi)容。的對(duì)象內(nèi)容。78n4 重載方法名重載方法名如果需要在同一個(gè)類中寫多個(gè)方法,讓它們對(duì)不同的變?nèi)绻枰谕粋€(gè)類中寫多個(gè)方法,讓它們對(duì)不同的變量進(jìn)行同樣的操作,就需要重載方法名。量進(jìn)行同樣的操作,就需要重載方法名。例如,假定要打印例如,假定要打印int、float和和String類型的值,每種類類型的值,每種類型的打印方式不同。按照慣例,此時(shí)可以建立三個(gè)方法型的打印方式不同。按照慣例,此時(shí)可以建立三個(gè)方法printInt()

5、、printFloat()和和printString()。如果處理更多的。如果處理更多的情況,則需要建立更多個(gè)方法,處理起來比較麻煩。情況,則需要建立更多個(gè)方法,處理起來比較麻煩。Java允許對(duì)多個(gè)方法使用同一個(gè)方法名,這就是方法名允許對(duì)多個(gè)方法使用同一個(gè)方法名,這就是方法名的重載。方法重載允許的重載。方法重載允許Java在同一個(gè)類中定義相同的方在同一個(gè)類中定義相同的方法名,但需要具有不同的參數(shù)表。法名,但需要具有不同的參數(shù)表。9例如,針對(duì)打印示例,可以根據(jù)參數(shù)自變量的類型來區(qū)例如,針對(duì)打印示例,可以根據(jù)參數(shù)自變量的類型來區(qū)分,因此可以定義三個(gè)方法:分,因此可以定義三個(gè)方法:public vo

6、id print(int i)Public void print(float f)Public void print(String s)public void print(int i)Public void print(int j)以下定義是否可行?以下定義是否可行?重載方法規(guī)則:重載方法規(guī)則:調(diào)用語句的自變量列表必須足夠判明要調(diào)用的是哪個(gè)方法。調(diào)用語句的自變量列表必須足夠判明要調(diào)用的是哪個(gè)方法。重載方法的參數(shù)表必須不同,即參數(shù)個(gè)數(shù)或參數(shù)類型不同。重載方法的參數(shù)表必須不同,即參數(shù)個(gè)數(shù)或參數(shù)類型不同。10n對(duì)象的構(gòu)造與初始化步驟:對(duì)象的構(gòu)造與初始化步驟:分配新對(duì)象的空間,并進(jìn)行默認(rèn)初始化。分配新

7、對(duì)象的空間,并進(jìn)行默認(rèn)初始化。執(zhí)行顯式的成員初始化。執(zhí)行顯式的成員初始化。執(zhí)行構(gòu)造方法執(zhí)行構(gòu)造方法(特殊方法特殊方法)。n1 顯式成員初始化:顯式成員初始化:如果在成員說明中寫有簡單的賦值如果在成員說明中寫有簡單的賦值表達(dá)式,就可以在構(gòu)造對(duì)象時(shí)進(jìn)行顯式的成員初始化。表達(dá)式,就可以在構(gòu)造對(duì)象時(shí)進(jìn)行顯式的成員初始化。 public class Initialized private int x=5; private String name=“Fred”; priavte Date created=new Date();11n2 構(gòu)造方法構(gòu)造方法如果要處理更加復(fù)雜的情況,就需要執(zhí)行一個(gè)方法來完如果要

8、處理更加復(fù)雜的情況,就需要執(zhí)行一個(gè)方法來完成初始化,而顯式初始化不能做到這一點(diǎn)。成初始化,而顯式初始化不能做到這一點(diǎn)。為了實(shí)現(xiàn)這樣的功能,系統(tǒng)定義了構(gòu)造方法,同時(shí)允許為了實(shí)現(xiàn)這樣的功能,系統(tǒng)定義了構(gòu)造方法,同時(shí)允許程序員編寫自己的構(gòu)造方法完成不同的操作。程序員編寫自己的構(gòu)造方法完成不同的操作。構(gòu)造方法是特殊的類方法,它的名字與類名相同,沒有構(gòu)造方法是特殊的類方法,它的名字與類名相同,沒有返回值,在創(chuàng)建對(duì)象實(shí)例時(shí)由返回值,在創(chuàng)建對(duì)象實(shí)例時(shí)由new運(yùn)算符自動(dòng)調(diào)用。運(yùn)算符自動(dòng)調(diào)用。為了創(chuàng)建實(shí)例的方便,一個(gè)類可以有具有不同參數(shù)列表為了創(chuàng)建實(shí)例的方便,一個(gè)類可以有具有不同參數(shù)列表的構(gòu)造方法,即構(gòu)造方法可

9、以重載。的構(gòu)造方法,即構(gòu)造方法可以重載。1213構(gòu)造方法特性構(gòu)造方法特性構(gòu)造方法的名字與類名相同。構(gòu)造方法的名字與類名相同。沒有返回類型。沒有返回類型。通常要說明為通常要說明為public類型,即公有的。類型,即公有的。必須為所有的變量賦初值。必須為所有的變量賦初值。可以按需要包含所需的參數(shù)列表??梢园葱枰璧膮?shù)列表。構(gòu)造方法不能繼承。構(gòu)造方法不能繼承。14n3 默認(rèn)構(gòu)造方法默認(rèn)構(gòu)造方法默認(rèn)構(gòu)造方法的參數(shù)列表及方法體均為空,所生成的對(duì)默認(rèn)構(gòu)造方法的參數(shù)列表及方法體均為空,所生成的對(duì)象的屬性值為零或空。象的屬性值為零或空。如果程序員定義了構(gòu)造方法,那么,最好包含一個(gè)參數(shù)如果程序員定義了構(gòu)

10、造方法,那么,最好包含一個(gè)參數(shù)表為空的構(gòu)造方法,否則,調(diào)用表為空的構(gòu)造方法,否則,調(diào)用new className()時(shí)會(huì)時(shí)會(huì)出現(xiàn)編譯錯(cuò)誤。出現(xiàn)編譯錯(cuò)誤。15應(yīng)包含一個(gè)參數(shù)應(yīng)包含一個(gè)參數(shù)為空的構(gòu)造方法為空的構(gòu)造方法1617n在在Java中,如果在類的成員方法中訪問類的成員變量,中,如果在類的成員方法中訪問類的成員變量,可以使用關(guān)鍵字可以使用關(guān)鍵字this指明要操作的對(duì)象。指明要操作的對(duì)象。18動(dòng)物哺乳動(dòng)物爬行動(dòng)物鯨狗蜥蜴蛇巨蜥壁虎一般一般具體具體19n1“is a”關(guān)系關(guān)系Manager和和Employee之間存在之間存在“is a”關(guān)系,關(guān)系,即,即,Manager is a Employee

11、。20n2 extends關(guān)鍵字關(guān)鍵字派生機(jī)制:派生機(jī)制:面向?qū)ο笳Z言提供了派生機(jī)制,它允許用以面向?qū)ο笳Z言提供了派生機(jī)制,它允許用以前的類來定義一個(gè)新類,新類稱為子類,原來的類稱作前的類來定義一個(gè)新類,新類稱為子類,原來的類稱作父類或超類。兩類中公共的內(nèi)容放到父類中,特殊的內(nèi)父類或超類。兩類中公共的內(nèi)容放到父類中,特殊的內(nèi)容放到子類中。容放到子類中。extends關(guān)鍵字:關(guān)鍵字:在在Java中,用關(guān)鍵字中,用關(guān)鍵字extends表示派表示派生。其格式如下:生。其格式如下:public class A extends B類類A派生于類派生于類B,A為子類,為子類,B為父類。如果一個(gè)類的定為父類

12、。如果一個(gè)類的定義中沒有出現(xiàn)義中沒有出現(xiàn)extends關(guān)鍵字,則表明這個(gè)類派生于關(guān)鍵字,則表明這個(gè)類派生于Object類,類,Object類是類是Java中預(yù)定義的任何類的父類。中預(yù)定義的任何類的父類。21父類父類子類子類繼承繼承22n3 單重繼承單重繼承Java只允許從一個(gè)類中擴(kuò)展類,這種限制稱為單重繼只允許從一個(gè)類中擴(kuò)展類,這種限制稱為單重繼承。承。Java規(guī)定單重繼承的限制,是讓代碼的可靠性更高。規(guī)定單重繼承的限制,是讓代碼的可靠性更高。public class A public void f() public class B public void f() 如果類C派生于類A和類B,這

13、樣類A和類B中的方法f都可以延伸到類C中,那么哪個(gè)才是類C的實(shí)例真正調(diào)用的方法呢?這顯然容易引起混淆。23Object類是類是Java程序中所有類的直接或間接父類。程序中所有類的直接或間接父類。Object派生的樹狀結(jié)構(gòu)派生的樹狀結(jié)構(gòu)24Object類中主要方法:類中主要方法:public final Class getClass():獲取當(dāng)前對(duì)象所屬的類信息。public String toString():按字符串對(duì)象返回當(dāng)前對(duì)象本身的有關(guān)信息。public boolean equals(Object obj):比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,是返回true,否則返回false。protec

14、ted Object clone():生成當(dāng)前對(duì)象的一個(gè)復(fù)制,并返回這個(gè)復(fù)制對(duì)象。public int hashCode():返回該對(duì)象的哈希代碼值。protected void finalize() throws Throwable:定義回收當(dāng)前對(duì)象時(shí)所需要完成的資源釋放工作。25n4 多態(tài)性多態(tài)性多態(tài)性是指同一名字的若干個(gè)方法,有不同的實(shí)現(xiàn)多態(tài)性是指同一名字的若干個(gè)方法,有不同的實(shí)現(xiàn)(放放方法體中的代碼不一樣方法體中的代碼不一樣)。當(dāng)我們用一個(gè)方法名調(diào)用方法。當(dāng)我們用一個(gè)方法名調(diào)用方法時(shí),執(zhí)行的是這些版本中的一種。時(shí),執(zhí)行的是這些版本中的一種。多態(tài)性是多態(tài)性是通過通過重載重載和和重寫重寫來

15、實(shí)現(xiàn)的。來實(shí)現(xiàn)的。26方法方法mm采用采用ObjectObject型參型參數(shù),所以可以用任何對(duì)數(shù),所以可以用任何對(duì)象作為參數(shù)調(diào)用象作為參數(shù)調(diào)用mm方法。方法。27動(dòng)態(tài)綁定:動(dòng)態(tài)綁定:調(diào)用方法調(diào)用方法m(Object x)時(shí),調(diào)用了時(shí),調(diào)用了x的的toString方法,方法,x可能是可能是GraduateStudent、Student、Person或或Object類的實(shí)例,類的實(shí)例, GraduateStudent、Student、Person或或Object類都有自己對(duì)類都有自己對(duì)toString方法方法的實(shí)現(xiàn),采用哪一種實(shí)現(xiàn)由的實(shí)現(xiàn),采用哪一種實(shí)現(xiàn)由Java虛擬機(jī)在運(yùn)行時(shí)動(dòng)態(tài)決虛擬機(jī)在運(yùn)行時(shí)

16、動(dòng)態(tài)決定,這種能力稱為定,這種能力稱為動(dòng)態(tài)綁定動(dòng)態(tài)綁定。28p動(dòng)態(tài)綁定機(jī)制:動(dòng)態(tài)綁定機(jī)制:假設(shè)對(duì)象假設(shè)對(duì)象o是類是類C1,C2,Cn-1和和Cn的實(shí)的實(shí)例,其中,例,其中,C1是是C2的子類,的子類,C2是是C3的子類,的子類,Cn-1是是Cn的子類,如果對(duì)象的子類,如果對(duì)象o調(diào)用一個(gè)方法調(diào)用一個(gè)方法m,Java虛擬機(jī)依次虛擬機(jī)依次在類在類C1,C2,Cn-1,Cn中查找方法中查找方法m的實(shí)現(xiàn),直到找到為止。的實(shí)現(xiàn),直到找到為止。CnCn-1C2C1如果o是C1的實(shí)例,它也是C2,Cn-1和Cn的實(shí)例。Java .lang.Object29n5 方法自變量和異類集合方法自變量和異類集合方法的參

17、量方法的參量public TaxRate findTaxRate(Employee e) /進(jìn)行計(jì)算并返回e的稅率 Manager m=new Manager();TaxRate t=findTaxRate(m);30異類集合:異類集合:異類集合是由不同質(zhì)內(nèi)容組成的集合,也就異類集合是由不同質(zhì)內(nèi)容組成的集合,也就是說,集合內(nèi)所含元素的類型可以不完全一致。是說,集合內(nèi)所含元素的類型可以不完全一致。Employee staff=new Employee1024;staff0=new Manager();staff1=new Employee();31n6 instanceof運(yùn)算符運(yùn)算符由于類的多

18、態(tài)性,類的變量既可以指向本類實(shí)例,又可由于類的多態(tài)性,類的變量既可以指向本類實(shí)例,又可以指向其子類的實(shí)例。在程序中,有時(shí)需要判明某個(gè)引以指向其子類的實(shí)例。在程序中,有時(shí)需要判明某個(gè)引用到底指向哪個(gè)實(shí)例,這可以通過用到底指向哪個(gè)實(shí)例,這可以通過instanceof運(yùn)算符來運(yùn)算符來實(shí)現(xiàn)。實(shí)現(xiàn)。ObjectEmployeeManagerContractor32n7 轉(zhuǎn)換對(duì)象轉(zhuǎn)換對(duì)象Java允許使用對(duì)象之父類類型的一個(gè)變量指示該對(duì)象,允許使用對(duì)象之父類類型的一個(gè)變量指示該對(duì)象,稱為轉(zhuǎn)換對(duì)象稱為轉(zhuǎn)換對(duì)象(casting)。Employee e=new Manager();Manager e=new Em

19、ployee ();33如果用如果用instanceof運(yùn)算符已判明父類的引用指向的是子運(yùn)算符已判明父類的引用指向的是子類的實(shí)例,就可以轉(zhuǎn)換該引用,恢復(fù)對(duì)象的全部功能。類的實(shí)例,就可以轉(zhuǎn)換該引用,恢復(fù)對(duì)象的全部功能。34n1 方法重寫示例方法重寫示例如果子類不需要使用從父類繼承來的方法的功能,可以如果子類不需要使用從父類繼承來的方法的功能,可以定義自己的方法,這就是定義自己的方法,這就是重寫重寫的概念,也稱為的概念,也稱為方法的隱藏方法的隱藏。子類中定義的方法所用的名字、返回類型及參數(shù)表和父子類中定義的方法所用的名字、返回類型及參數(shù)表和父類中方法使用完全一樣,稱子類方法重寫了父類中的方法。類中

20、方法使用完全一樣,稱子類方法重寫了父類中的方法。通過方法的通過方法的重寫重寫,可以達(dá)到語言,可以達(dá)到語言多態(tài)性多態(tài)性的目的。的目的。35子類重寫父類方法的情況子類重寫父類方法的情況子類要做與父類不同的事情;子類要做與父類不同的事情;在子類中取消這個(gè)方法;在子類中取消這個(gè)方法;子類要做比父類更多的事情。子類要做比父類更多的事情。重寫的同名方法中,子類方法不能比父類方法的訪重寫的同名方法中,子類方法不能比父類方法的訪問權(quán)限更嚴(yán)格。問權(quán)限更嚴(yán)格。363738如果子類已經(jīng)重寫了父類中的方法,但在子類中還想使如果子類已經(jīng)重寫了父類中的方法,但在子類中還想使用父類中被隱藏的方法,可以使用用父類中被隱藏的方

21、法,可以使用super關(guān)鍵字。關(guān)鍵字。39n2 方法重寫的規(guī)則方法重寫的規(guī)則重寫方法的允許訪問范圍不能小于原方法。重寫方法的允許訪問范圍不能小于原方法。40重寫方法所拋出的異常不能比原方法更多。重寫方法所拋出的異常不能比原方法更多。41n3 父類構(gòu)造方法調(diào)用父類構(gòu)造方法調(diào)用Java要求一個(gè)父類的對(duì)象要在子類運(yùn)行前完全初始化。要求一個(gè)父類的對(duì)象要在子類運(yùn)行前完全初始化。super關(guān)鍵字也可以用在構(gòu)造方法中,其功能為調(diào)用父關(guān)鍵字也可以用在構(gòu)造方法中,其功能為調(diào)用父類的構(gòu)造方法。類的構(gòu)造方法。如果在子類的構(gòu)造方法的定義中沒有明確調(diào)用父類的構(gòu)如果在子類的構(gòu)造方法的定義中沒有明確調(diào)用父類的構(gòu)造方法,則系

22、統(tǒng)在執(zhí)行子類的構(gòu)造方法時(shí)會(huì)自動(dòng)調(diào)用父造方法,則系統(tǒng)在執(zhí)行子類的構(gòu)造方法時(shí)會(huì)自動(dòng)調(diào)用父類的構(gòu)造方法類的構(gòu)造方法(無參數(shù)的構(gòu)造方法無參數(shù)的構(gòu)造方法)。如果在子類的構(gòu)造方法的定義中調(diào)用了父類的構(gòu)造方法,如果在子類的構(gòu)造方法的定義中調(diào)用了父類的構(gòu)造方法,則調(diào)用語句必須出現(xiàn)在子類構(gòu)造方法的第一行。則調(diào)用語句必須出現(xiàn)在子類構(gòu)造方法的第一行。42class Employee String name; public Employee(String s) name=s; class Manager extends Employee String department; public Manager(String

23、 s, String d) super(s); department=d; 43一個(gè)一個(gè)Java源代碼文件稱為一個(gè)編譯單元。源代碼文件稱為一個(gè)編譯單元。Java語言規(guī)定,一個(gè)編譯單元中只能有一個(gè)語言規(guī)定,一個(gè)編譯單元中只能有一個(gè)public類,類,且該類名與文件名相同。且該類名與文件名相同。編譯單元中的其它類是該編譯單元中的其它類是該public類的支撐類。類的支撐類。經(jīng)過編譯,編譯單元中的每個(gè)類都產(chǎn)生一個(gè)經(jīng)過編譯,編譯單元中的每個(gè)類都產(chǎn)生一個(gè).class文件。文件。Java的工作程序是一系列的的工作程序是一系列的.class文件,文件,Java解釋器負(fù)解釋器負(fù)責(zé)尋找、加載和解釋這些文件。責(zé)尋

24、找、加載和解釋這些文件。44nJava包的概念包的概念包是類的容器,包的設(shè)計(jì)人員利用包來劃分名字空間,包是類的容器,包的設(shè)計(jì)人員利用包來劃分名字空間,用于分隔類名空間,以避免類名沖突。用于分隔類名空間,以避免類名沖突。程序員可以使用程序員可以使用package指明源文件中的類屬于哪個(gè)具指明源文件中的類屬于哪個(gè)具體的包。包語句的格式為:體的包。包語句的格式為:package pkg1.pkg2.pkg3程序中如果有package語句,該語句一定是源文件中的第一條可執(zhí)行語句,它的前面只能有注釋或空行。另外,一個(gè)文件中最多只能有一條package語句。包的名字有層次關(guān)系,各層之間以點(diǎn)分隔。包層次必須

25、與Java開發(fā)系統(tǒng)的文件系統(tǒng)結(jié)構(gòu)相同。通常包名中全部用小寫字母,這與類名以大寫字母開頭,且各字的首字母亦大寫的命名約定有所不同。45nImport語句語句package mypackage;public class MyClass /mypackge.MyClass m=new mypackge.MyClass(); import mypackage.*;/MyClass m=new MyClass(); 引入語句的格式:引入語句的格式:import pkg1.pkg2.pkg3.(類名類名|*)46n目錄層次關(guān)系及目錄層次關(guān)系及classpath環(huán)境變量環(huán)境變量自定義包自定義包c(diǎn)harpte

26、r_1.charpter_11charpter_1.charpter_11,并定義類,并定義類HelloWorldHelloWorld,該類位于,該類位于D:javapojectsrcD:javapojectsrc目錄中。目錄中。47工作目錄:工作目錄:classpath=.;D:Program FilesJavajdk1.7.0_25lib; D:Javaprojectbin編譯類文件編譯類文件在編譯命令中用在編譯命令中用-d-d選項(xiàng),則選項(xiàng),則javajava編譯器可以創(chuàng)建包目錄,并編譯器可以創(chuàng)建包目錄,并把生成的類文件放到該目錄中。把生成的類文件放到該目錄中。48編譯完成后,系統(tǒng)在目錄編

27、譯完成后,系統(tǒng)在目錄D:Javaprojectbin下建立下建立了子目錄了子目錄charpter_1charpter_11,并將編譯的結(jié)果,并將編譯的結(jié)果HelloWorld.class和和Print.class放在此目錄下。放在此目錄下。49運(yùn)行應(yīng)用程序運(yùn)行應(yīng)用程序50成員變量成員方法成員變量成員方法類變量類方法對(duì)象對(duì)象A對(duì)象對(duì)象B類成員共享類成員共享如果類中包含類成員如果類中包含類成員( (類變量類變量/ /類方法類方法) ),系統(tǒng)只在實(shí)例化,系統(tǒng)只在實(shí)例化該類的第一個(gè)對(duì)象的時(shí)候,為類成員分配內(nèi)存,以后再生該類的第一個(gè)對(duì)象的時(shí)候,為類成員分配內(nèi)存,以后再生成該類得實(shí)例對(duì)象時(shí),將不再為類成員

28、分配內(nèi)存,不同對(duì)成該類得實(shí)例對(duì)象時(shí),將不再為類成員分配內(nèi)存,不同對(duì)象的類變量將共享同一內(nèi)存空間。象的類變量將共享同一內(nèi)存空間。51n1 類變量類變量(靜態(tài)變量靜態(tài)變量)在程序設(shè)計(jì)中,有時(shí)需要讓一個(gè)變量被類的多個(gè)實(shí)例對(duì)在程序設(shè)計(jì)中,有時(shí)需要讓一個(gè)變量被類的多個(gè)實(shí)例對(duì)象所共享,以實(shí)現(xiàn)多個(gè)對(duì)象之間的通信,或用于記錄已被象所共享,以實(shí)現(xiàn)多個(gè)對(duì)象之間的通信,或用于記錄已被創(chuàng)建的對(duì)象的個(gè)數(shù),而這樣的變量被稱為類變量或靜態(tài)變創(chuàng)建的對(duì)象的個(gè)數(shù),而這樣的變量被稱為類變量或靜態(tài)變量。量。將一個(gè)變量定義為類變量的方法就是將這個(gè)變量標(biāo)記上將一個(gè)變量定義為類變量的方法就是將這個(gè)變量標(biāo)記上關(guān)鍵字關(guān)鍵字static。52直

29、接使用類名直接使用類名指向靜態(tài)變量指向靜態(tài)變量53n2 類方法類方法(靜態(tài)方法靜態(tài)方法)在程序設(shè)計(jì)中,如果需要在尚未創(chuàng)建一個(gè)對(duì)象實(shí)例的時(shí)在程序設(shè)計(jì)中,如果需要在尚未創(chuàng)建一個(gè)對(duì)象實(shí)例的時(shí)候就去引用它的程序代碼,那么標(biāo)記上關(guān)鍵字候就去引用它的程序代碼,那么標(biāo)記上關(guān)鍵字static,這,這樣的方法稱為類方法或靜態(tài)方法。樣的方法稱為類方法或靜態(tài)方法。直接使用類名直接使用類名指向靜態(tài)方法指向靜態(tài)方法由于靜態(tài)方法在沒由于靜態(tài)方法在沒有定義它所屬的類有定義它所屬的類的對(duì)象的情況下加的對(duì)象的情況下加以調(diào)用,故不存在以調(diào)用,故不存在this值。值。一個(gè)靜態(tài)方法只能一個(gè)靜態(tài)方法只能使用其內(nèi)部定義的使用其內(nèi)部定義的

30、參數(shù)或靜態(tài)變量,參數(shù)或靜態(tài)變量,如果企圖使用非靜如果企圖使用非靜態(tài)變量將引起變異態(tài)變量將引起變異錯(cuò)誤。錯(cuò)誤。54final可以修飾可以修飾類類或類的成員或類的成員(成員變量成員變量或或成員方法成員方法)。用用final修飾的類或類成員是不能改變的。如果一個(gè)方法修飾的類或類成員是不能改變的。如果一個(gè)方法被定義為被定義為final,則,則不能被重寫不能被重寫,如果一個(gè)類被定義為,如果一個(gè)類被定義為final,它,它不能有子類不能有子類。n1 終極類終極類被標(biāo)記為被標(biāo)記為final的類稱為終極類,其聲明格式如下:的類稱為終極類,其聲明格式如下:final class finalClassName 終

31、極類不能被繼承終極類不能被繼承55n2 終極方法終極方法被標(biāo)記為被標(biāo)記為final的方法稱為終極方法,其聲明格式如下:的方法稱為終極方法,其聲明格式如下:final returnType finalMethod (paramlist) 終極方法不能被重寫終極方法不能被重寫56n3 終極變量終極變量被標(biāo)記為被標(biāo)記為final的變量稱為的變量稱為終極變量終極變量。終極變量是一個(gè)常。終極變量是一個(gè)常量,企圖改變終極變量的取值將會(huì)引起變異錯(cuò)誤。量,企圖改變終極變量的取值將會(huì)引起變異錯(cuò)誤。如果將一個(gè)引用類型的變量標(biāo)記為如果將一個(gè)引用類型的變量標(biāo)記為final,那么這個(gè)變量,那么這個(gè)變量不能再指向其它引用

32、,但它所指對(duì)象的取值仍然是可以不能再指向其它引用,但它所指對(duì)象的取值仍然是可以改變的。改變的。57n1 抽象類抽象類可以通過關(guān)鍵字可以通過關(guān)鍵字abstract把一個(gè)類定義為把一個(gè)類定義為抽象類抽象類。在抽象類中,每一個(gè)未被定義具體實(shí)現(xiàn)的方法也標(biāo)記為在抽象類中,每一個(gè)未被定義具體實(shí)現(xiàn)的方法也標(biāo)記為abstract,稱為,稱為抽象方法抽象方法。在程序中不能用抽象類作為模板來創(chuàng)建對(duì)象,必須生成在程序中不能用抽象類作為模板來創(chuàng)建對(duì)象,必須生成抽象類的一個(gè)非抽象的子類后才能創(chuàng)建實(shí)例。抽象類的一個(gè)非抽象的子類后才能創(chuàng)建實(shí)例。抽象類可以包含抽象類可以包含抽象方法抽象方法和和非抽象方法非抽象方法,反之,不能

33、在,反之,不能在非抽象類中聲明抽象方法,即只有抽象類才能具有抽象非抽象類中聲明抽象方法,即只有抽象類才能具有抽象方法。方法。58modifier abstract AbstractClass modifier abstract (參數(shù)列表);p抽象類定義:抽象類定義:p抽象方法定義:抽象方法定義:59n抽象類示例抽象類示例60可以定義抽象類的引用變量可以定義抽象類的引用變量61n接口接口(Interface)接口允許創(chuàng)建者規(guī)定一個(gè)類的基本形式,包括方法名、接口允許創(chuàng)建者規(guī)定一個(gè)類的基本形式,包括方法名、自變量列表以及返回類型,但不規(guī)定方法主體。因此在自變量列表以及返回類型,但不規(guī)定方法主體。因

34、此在接口中所有的方法都是接口中所有的方法都是抽象方法體抽象方法體。從這個(gè)角度上講,。從這個(gè)角度上講,可以把接口看成可以把接口看成特殊的抽象類特殊的抽象類。Java允許一個(gè)類實(shí)現(xiàn)允許一個(gè)類實(shí)現(xiàn)(implements)多個(gè)接口,從而實(shí)多個(gè)接口,從而實(shí)現(xiàn)比多重繼承更加強(qiáng)大的能力。現(xiàn)比多重繼承更加強(qiáng)大的能力。62n1 1 接口的定義接口的定義接口修飾符 interface 接口名稱extends 父接口名 /方法原型或靜態(tài)變量接口也具有數(shù)據(jù)成員與方法,但數(shù)據(jù)成員一定要賦初接口也具有數(shù)據(jù)成員與方法,但數(shù)據(jù)成員一定要賦初值,且此值值,且此值不能再更改不能再更改,而方法必須是,而方法必須是“抽象方法抽象方法

35、”。接口定義接口定義63n2 2 接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)類修飾符 class 類名 implements 接口名稱 /接口實(shí)現(xiàn) /其它內(nèi)容接口實(shí)現(xiàn)接口實(shí)現(xiàn)64接口實(shí)現(xiàn)測試接口實(shí)現(xiàn)測試可以使用接口名稱作為一個(gè)可以使用接口名稱作為一個(gè)引用變量的類型引用變量的類型65n內(nèi)部類內(nèi)部類/接口接口內(nèi)部類:內(nèi)部類:也稱為也稱為嵌套類嵌套類,是指在一個(gè)類或接口內(nèi)部聲明,是指在一個(gè)類或接口內(nèi)部聲明的類。內(nèi)部類包括:的類。內(nèi)部類包括:成員類成員類、局部類局部類和和匿名類匿名類。內(nèi)部接口:內(nèi)部接口:也稱為也稱為嵌套接口嵌套接口,是在一個(gè)類或接口的內(nèi)部,是在一個(gè)類或接口的內(nèi)部聲明一個(gè)接口。由于接口并不實(shí)現(xiàn)任何行為,所以

36、,嵌聲明一個(gè)接口。由于接口并不實(shí)現(xiàn)任何行為,所以,嵌套接口都是套接口都是成員接口成員接口。封裝類封裝類/接口:接口:包含內(nèi)部類或內(nèi)部接口的類和接口分別包含內(nèi)部類或內(nèi)部接口的類和接口分別稱為封裝類和封裝接口。稱為封裝類和封裝接口。66n1 成員類成員類成員類是在封裝類或封裝接口中作為成員聲明的類。成員類是在封裝類或封裝接口中作為成員聲明的類。成員類包含成員類包含靜態(tài)成員類靜態(tài)成員類和和非靜態(tài)成員類非靜態(tài)成員類。成員類具有如下特征:成員類具有如下特征:(1)靜態(tài)成員類中既可以定義靜態(tài)成員,也可以定義非靜態(tài)成員類中既可以定義靜態(tài)成員,也可以定義非靜態(tài)成員,非靜態(tài)成員類中不能定義靜態(tài)變量和方法。靜態(tài)成

37、員,非靜態(tài)成員類中不能定義靜態(tài)變量和方法。(2)靜態(tài)成員類中能直接訪問封裝類的所有靜態(tài)成員,靜態(tài)成員類中能直接訪問封裝類的所有靜態(tài)成員,但不能直接訪問封裝類的非靜態(tài)成員。但不能直接訪問封裝類的非靜態(tài)成員。(3)非靜態(tài)成員類可以訪問封裝類的所有成員。非靜態(tài)成員類可以訪問封裝類的所有成員。67(4) 在成員類中訪問封裝類的成員時(shí),若封裝類的成員在成員類中訪問封裝類的成員時(shí),若封裝類的成員與成員類的成員不重名,則可以直接用成員名進(jìn)行訪問;與成員類的成員不重名,則可以直接用成員名進(jìn)行訪問;若封裝類與成員類的成員的成員重名,則若封裝類與成員類的成員的成員重名,則訪問封裝類實(shí)例成員的語法:訪問封裝類實(shí)例成

38、員的語法:封裝類類名封裝類類名. .thisthis. .封裝類實(shí)例成員名封裝類實(shí)例成員名; ;訪問封裝類靜態(tài)成員的語法:訪問封裝類靜態(tài)成員的語法:封裝類類名封裝類類名. .封裝類靜態(tài)實(shí)例成員名封裝類靜態(tài)實(shí)例成員名; ;68(5) 可以在封裝類之外創(chuàng)建靜態(tài)成員類和非靜態(tài)成員類可以在封裝類之外創(chuàng)建靜態(tài)成員類和非靜態(tài)成員類的實(shí)例,其中,的實(shí)例,其中,創(chuàng)建靜態(tài)成員類實(shí)例的語法為:創(chuàng)建靜態(tài)成員類實(shí)例的語法為:封裝類類名封裝類類名. .靜態(tài)成員類類名靜態(tài)成員類類名 實(shí)例變量名實(shí)例變量名= = newnew 封裝類實(shí)例成員名封裝類實(shí)例成員名. .靜態(tài)成員類類名靜態(tài)成員類類名; ;在封裝類之外創(chuàng)建非靜態(tài)成員

39、類實(shí)例時(shí),需要先創(chuàng)建封在封裝類之外創(chuàng)建非靜態(tài)成員類實(shí)例時(shí),需要先創(chuàng)建封裝類的實(shí)例,然后使用以下語法創(chuàng)建非靜態(tài)成員類實(shí)例:裝類的實(shí)例,然后使用以下語法創(chuàng)建非靜態(tài)成員類實(shí)例:封裝類類名封裝類類名. .靜態(tài)成員類類名靜態(tài)成員類類名 實(shí)例變量名實(shí)例變量名= = 封裝類實(shí)例成員名封裝類實(shí)例成員名. . new. new.非靜態(tài)成員類類名非靜態(tài)成員類類名();();69(6) 在封裝類之外訪問靜態(tài)成員類的靜態(tài)成員時(shí),需要在封裝類之外訪問靜態(tài)成員類的靜態(tài)成員時(shí),需要用封裝類的名稱作為前綴,語法如下:用封裝類的名稱作為前綴,語法如下:封裝類類名封裝類類名. .靜態(tài)成員類類名靜態(tài)成員類類名. .靜態(tài)成員名靜態(tài)成

40、員名; ;封裝接口名稱封裝接口名稱. . 成員類類名成員類類名. .靜態(tài)成員名靜態(tài)成員名; ;(7) 接口中的成員類總是接口中的成員類總是public和和static的,接口中成員的,接口中成員類的靜態(tài)成員可以在封裝接口之外直接使用,語法為:類的靜態(tài)成員可以在封裝接口之外直接使用,語法為:70非非靜靜態(tài)態(tài)成成員員類類示示例例71靜靜態(tài)態(tài)成成員員類類示示例例72n2 局部類局部類局部內(nèi)部類是在封裝類的方法中定義的內(nèi)部類,與局部局部內(nèi)部類是在封裝類的方法中定義的內(nèi)部類,與局部變量類似,其作用域是定義它的代碼塊。變量類似,其作用域是定義它的代碼塊。局部類的典型用法是與接口相配合,用局部類來實(shí)現(xiàn)接局部

41、類的典型用法是與接口相配合,用局部類來實(shí)現(xiàn)接口,并在方法中返回接口類型???,并在方法中返回接口類型。局部類具有如下特征:局部類具有如下特征:(1)局部類的類名不能與其封裝類重名。局部類的類名不能與其封裝類重名。(2)局部類可以是局部類可以是abstract和和final型,訪問修飾符只能是型,訪問修飾符只能是缺省的,不能是缺省的,不能是public、private或或protected。(3)局部類中不允許包括靜態(tài)成員局部類中不允許包括靜態(tài)成員(變量和方法變量和方法)。73(4)在局部類中只能訪問它所在方法中的在局部類中只能訪問它所在方法中的final型變量,不型變量,不能訪問非能訪問非fin

42、al型的變量。型的變量。(5)不允許包括靜態(tài)成員不允許包括靜態(tài)成員(變量和方法變量和方法)。(6)在局部類中可以訪問封裝類的成員,如果局部類成員在局部類中可以訪問封裝類的成員,如果局部類成員與封裝類成員不重名,可以直接用成員名進(jìn)行訪問;如果與封裝類成員不重名,可以直接用成員名進(jìn)行訪問;如果封裝類成員與局部類成員重名,其中,封裝類成員與局部類成員重名,其中,訪問封裝類實(shí)例成員需要使用以下語法:訪問封裝類實(shí)例成員需要使用以下語法:封裝類類名封裝類類名. .thisthis. .封裝類實(shí)例成員名封裝類實(shí)例成員名; ;訪問封裝類靜態(tài)成員的語法:訪問封裝類靜態(tài)成員的語法:封裝類類名封裝類類名. .封裝類

43、實(shí)例成員名封裝類實(shí)例成員名; ;74(7)局部類只在定義它的代碼段中可見,只能在封裝類內(nèi)局部類只在定義它的代碼段中可見,只能在封裝類內(nèi)部使用,在封裝類之外是不可見的,不能在封裝類之外創(chuàng)部使用,在封裝類之外是不可見的,不能在封裝類之外創(chuàng)建局部類的實(shí)例。建局部類的實(shí)例。75定義在方法內(nèi)定義在方法內(nèi)定義在作用域內(nèi)定義在作用域內(nèi)76局局部部類類示示例例77n3 匿名類匿名類匿名類是指沒有名稱的類,一般情況下,如果用一個(gè)類匿名類是指沒有名稱的類,一般情況下,如果用一個(gè)類對(duì)另一個(gè)類進(jìn)行擴(kuò)展對(duì)另一個(gè)類進(jìn)行擴(kuò)展(繼承繼承)或者實(shí)現(xiàn)一個(gè)特定的接口,同或者實(shí)現(xiàn)一個(gè)特定的接口,同時(shí),這個(gè)類實(shí)現(xiàn)的功能比較簡單,或者在

44、程序中只使用時(shí),這個(gè)類實(shí)現(xiàn)的功能比較簡單,或者在程序中只使用一次,就可以用匿名類的方式創(chuàng)建這個(gè)類的實(shí)例。一次,就可以用匿名類的方式創(chuàng)建這個(gè)類的實(shí)例。創(chuàng)建匿名類的語法如下:創(chuàng)建匿名類的語法如下:newnew 匿名類類名或接口名匿名類類名或接口名()() 類體類體; ; 78匿名類具有如下特征:匿名類具有如下特征:(1)匿名類必須是一個(gè)具體的對(duì)象,不允許是匿名類必須是一個(gè)具體的對(duì)象,不允許是abstract的,的,也不可以是也不可以是static。(2)匿名類的類體必須將其繼承或?qū)崿F(xiàn)的內(nèi)容具體化匿名類的類體必須將其繼承或?qū)崿F(xiàn)的內(nèi)容具體化(與與普通類沒有差別普通類沒有差別)。(3)匿名類本身沒有名字

45、,所以沒有構(gòu)造方法,只能用匿名類本身沒有名字,所以沒有構(gòu)造方法,只能用super關(guān)鍵字調(diào)用其父類的構(gòu)造方法。關(guān)鍵字調(diào)用其父類的構(gòu)造方法。(4)匿名類只能是匿名類只能是final型的,其中包括的所有變量和方型的,其中包括的所有變量和方法都是法都是final型的。型的。79匿匿名名類類示示例例80n4 成員接口成員接口成員接口是指在封裝類或封裝接口中聲明的接口。成員接口是指在封裝類或封裝接口中聲明的接口。當(dāng)一個(gè)接口被嵌套在一個(gè)類中時(shí),該接口修飾符可以是當(dāng)一個(gè)接口被嵌套在一個(gè)類中時(shí),該接口修飾符可以是public、private和缺省的,和缺省的,private接口只能在封裝類的接口只能在封裝類的內(nèi)

46、部實(shí)現(xiàn)和使用。內(nèi)部實(shí)現(xiàn)和使用。當(dāng)一個(gè)接口被嵌套在一個(gè)接口中時(shí),成員接口自動(dòng)擁有當(dāng)一個(gè)接口被嵌套在一個(gè)接口中時(shí),成員接口自動(dòng)擁有封裝接口訪問范圍,可以在外部加以實(shí)現(xiàn)。封裝接口訪問范圍,可以在外部加以實(shí)現(xiàn)。81成成員員接接口口示示例例82Java語言中的范型是語言中的范型是JDK1.5版本之后引入的新特性。版本之后引入的新特性。范型是對(duì)范型是對(duì)Java語言類型系統(tǒng)的一種擴(kuò)展,它支持創(chuàng)建語言類型系統(tǒng)的一種擴(kuò)展,它支持創(chuàng)建可以按類型進(jìn)行參數(shù)化的類、接口或方法??梢园搭愋瓦M(jìn)行參數(shù)化的類、接口或方法。類型參數(shù)是使用參數(shù)化類型時(shí)指定類型的一個(gè)占位符,類型參數(shù)是使用參數(shù)化類型時(shí)指定類型的一個(gè)占位符,就像方法的形式參數(shù)是運(yùn)行時(shí)傳遞的值占位符一樣。就像方法的形式參數(shù)是運(yùn)行時(shí)傳遞的值占位符一樣。范型就是將所操作的數(shù)據(jù)類型參數(shù)化,即該數(shù)據(jù)類型被范型就是將所操作的數(shù)據(jù)類型參數(shù)化,即該數(shù)據(jù)類型被聲明為一個(gè)參數(shù),聲明的類型參數(shù)在使用時(shí)用具體的類聲明為一個(gè)參數(shù),聲明的類型參數(shù)在使用時(shí)用具體的類型來替換。型來替換。83n 1 范型的聲明范型的聲明如果一個(gè)類或接口包含了一個(gè)或多個(gè)類型變量,則稱該如果一個(gè)類或接口包含了一個(gè)

溫馨提示

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