版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
6.1內(nèi)部類
Java支持在一個(gè)類中定義另一個(gè)類,這樣的類稱作內(nèi)部類,而包含內(nèi)部類的類稱為內(nèi)部類的外嵌類。內(nèi)部類就是外嵌類里定義的一個(gè)類型而已,只不過(guò),該類型僅僅限于在本外嵌類中使用。
外嵌類的成員變量在內(nèi)部類中仍然有效,內(nèi)部類中的方法也可以調(diào)用外嵌類中的方法。
內(nèi)部類的類體中不可以聲明類變量和類方法。外嵌類的類體中可以用內(nèi)部類聲明對(duì)象,作為外嵌類的成員。其他類不可以用這個(gè)類的內(nèi)部類聲明對(duì)象例子1中有一個(gè)RedCowForm類,該類中有一個(gè)名字為RedCow的內(nèi)部類。程序運(yùn)行效果如圖。例子1RedCowForm.javaExample6_1.java注意的是,Java編譯器生成的內(nèi)部類的字節(jié)碼文件的名字和通常的類不同,內(nèi)部類對(duì)應(yīng)的字節(jié)碼文件的名字格式是“外嵌類名$內(nèi)部類名”,例如,例子1中內(nèi)部類的字節(jié)碼文件是RedCowForm$RedCow.class。因此,當(dāng)需要把字節(jié)碼文件復(fù)制給其他開發(fā)人員時(shí),不要忘記了內(nèi)部類的字節(jié)碼文件。訪問(wèn)修飾符:public,protectedprivate對(duì)內(nèi)部類沒(méi)有區(qū)別,因?yàn)閮?nèi)部類僅僅在該外嵌類中可以被使用。6.2匿名類
6.2.1和類有關(guān)的匿名類6.2.2和接口有關(guān)的匿名類Java允許直接使用一個(gè)類的子類的類體創(chuàng)建一個(gè)子類對(duì)象。假設(shè)People是類,那么下列代碼就是用People的一個(gè)子類(匿名類)創(chuàng)建對(duì)象:newPeople(){
匿名類的類體};匿名類可以繼承父類的方法也可以重寫父類的方法。使用匿名類時(shí),必然是在某個(gè)類中直接用匿名類創(chuàng)建對(duì)象,因此匿名類一定是內(nèi)部類。用匿名類創(chuàng)建對(duì)象時(shí),要直接使用父類的某個(gè)構(gòu)造方法。
中,向一個(gè)方法的參數(shù)傳遞了一個(gè)匿名類的對(duì)象,并用匿名類創(chuàng)建了一個(gè)對(duì)象。運(yùn)行效果如圖例子26.2匿名類
6.2.1和類有關(guān)的匿名類6.2.2和接口有關(guān)的匿名類Java允許直接用接口名和一個(gè)類體創(chuàng)建一個(gè)匿名對(duì)象,此類體被認(rèn)為是實(shí)現(xiàn)了Computable接口的類去掉類聲明后的類體,稱作匿名類。下列代碼就是用實(shí)現(xiàn)了Computable接口的類(匿名類)創(chuàng)建對(duì)象:
newComputable()
{
實(shí)現(xiàn)接口的匿名類的類體
};匿名類可以繼承父類的方法也可以重寫父類的方法。使用匿名類時(shí),必然是在某個(gè)類中直接用匿名類創(chuàng)建對(duì)象,因此匿名類一定是內(nèi)部類。用匿名類創(chuàng)建對(duì)象時(shí),要直接使用父類的某個(gè)構(gòu)造方法。例子3展示了和接口有關(guān)的匿名類的用法。運(yùn)行效果如圖例子36.3Lambda表達(dá)式
Lambda表達(dá)式主要目的是在使用單接口(只含有一個(gè)方法的接口)匿名類時(shí)讓代碼更加簡(jiǎn)潔。Lambda表達(dá)式就是一個(gè)匿名方法(函數(shù)).例子4針對(duì)單接口匿名類使用Lambda表達(dá)式簡(jiǎn)化了代碼。通常的方法:
intf(inta,intb){returna+b;}Lambda表達(dá)式:(inta,intb)->{returna+b;}Lambda表達(dá)式只寫參數(shù)列表(可以省略參數(shù)的類型)和方法體(參數(shù)列表和方法體之間的符號(hào)是->):假如Com是一個(gè)單接口(不必關(guān)心接口里方法的名稱):Lambda表達(dá)式,簡(jiǎn)化了匿名類的用法.如果更改了接口里方法的名字,Lambada表達(dá)式不受影響。Comcom=(doublex)->{
returnx*x*x;
};Lambda表達(dá)式:(a,b)->{returna+b;}6.4異常類
6.3.1try~catch語(yǔ)句6.3.2自定義異常類6.3.3final子語(yǔ)句Java的異常出現(xiàn)在方法調(diào)用過(guò)程中,即在方法調(diào)用過(guò)程中拋出異常對(duì)象,導(dǎo)致程序運(yùn)行出現(xiàn)異常,并等待處理。例如,流對(duì)象在調(diào)用read方法讀取一個(gè)不存在的文件時(shí),就會(huì)拋出IOException異常對(duì)象。使用try~catch語(yǔ)句來(lái)處理異常,將可能出現(xiàn)的異常操作放在try~catch語(yǔ)句的try部分,當(dāng)try部分中的某個(gè)方法調(diào)用發(fā)生異常后,try部分將立刻結(jié)束執(zhí)行,而轉(zhuǎn)向執(zhí)行相應(yīng)的catch部分。try{
包含可能發(fā)生異常的語(yǔ)句}catch(ExceptionSubClass1e){…}catch(ExceptionSubClass2e){…}各個(gè)catch參數(shù)中的異常類都是Exception的某個(gè)子類。
給出了try~catch語(yǔ)句的用法。例子56.4異常類
6.3.1try~catch語(yǔ)句6.3.2自定義異常類6.3.3final子語(yǔ)句我們也可以擴(kuò)展Exception類定義自己的異常類,然后規(guī)定哪些方法產(chǎn)生這樣的異常。一個(gè)方法在聲明時(shí)可以使用throws關(guān)鍵字聲明要產(chǎn)生的若干個(gè)異常,并在該方法的方法體中具體給出產(chǎn)生異常的操作,即用相應(yīng)的異常類創(chuàng)建對(duì)象,并使用throw關(guān)鍵字拋出該異常對(duì)象,導(dǎo)致該方法結(jié)束執(zhí)行。throw是Java的關(guān)鍵字,該關(guān)鍵字的作用就是拋出異常.throw和throws是兩個(gè)不同的關(guān)鍵字。
People類中有一個(gè)設(shè)置age的方法,如果向該方法傳遞小于1或大于160的整數(shù),方法就拋出異常。例子6IntegerException.javaPeople.javaExample6_6.java6.4異常類
6.3.1try~catch語(yǔ)句6.3.2自定義異常類6.3.3final子語(yǔ)句inally子語(yǔ)句的try~catch語(yǔ)句,語(yǔ)法格式如下:
try{}catch(ExceptionSubClasse){}finally{}其執(zhí)行機(jī)制是:在執(zhí)行try~catch語(yǔ)句后,執(zhí)行finally子語(yǔ)句,也就是說(shuō),無(wú)論在try部分是否發(fā)生過(guò)異常,finally子語(yǔ)句都會(huì)被執(zhí)行。例子7需要注意:如果在try~catch語(yǔ)句中執(zhí)行了return語(yǔ)句,那么finally子語(yǔ)句仍然會(huì)被執(zhí)行。例子7中模擬向貨船上裝載集裝箱,如果貨船超重,那么貨船認(rèn)為這是一個(gè)異常,將拒絕裝載集裝箱,但無(wú)論是否發(fā)生異常,貨船都需要正點(diǎn)啟航。DangerException.javaCargoBoat.javaExample6_7.java6.5Class類
6.5.1獲取類的有關(guān)信息6.5.2使用Class實(shí)例化一個(gè)對(duì)象得到一個(gè)類的實(shí)例的最常用的方式就是使用new運(yùn)算符和類的構(gòu)造方法。但是,Java通過(guò)使用Class也可以得到一個(gè)類的實(shí)例。為了使用Class得到一個(gè)類的實(shí)例,可以先得到一個(gè)和該類相關(guān)的Class對(duì)象(相當(dāng)于得到類型)。例子8publicstaticClass<?>forName(StringclassName)
throwsClassNotFoundException就可以返回一個(gè)和參數(shù)className指定的類相關(guān)的Class對(duì)象.public[]Constructors<?>getDeclaredConstructors()返回className類的全部構(gòu)造方法構(gòu)造方法。使用相應(yīng)的Class對(duì)象列出了Rect類的全部成員變量和方法的名稱。Rect.javaExample6_8.java6.5Class類
6.5.1獲取類的有關(guān)信息6.5.2使用Class實(shí)例化一個(gè)對(duì)象例子9publicConstructor<?>getDeclaredConstructor()返回className類的無(wú)參數(shù)的構(gòu)造方法,因此className類必須保證有無(wú)參數(shù)的構(gòu)造方法。注意,JDK9開始publicstaticClassforName(StringclassName)throwsClassNotFoundException方法被宣布為過(guò)時(shí)的方法,但仍然可以使用。用Class對(duì)象得到一個(gè)Circle類的實(shí)例。Circle.javaExample6_9.java6.6斷言
打開斷言關(guān)閉斷言斷言語(yǔ)句在調(diào)試代碼階段非常有用,斷言語(yǔ)句一般用于程序不準(zhǔn)備通過(guò)捕獲異常來(lái)處理的錯(cuò)誤,例如,當(dāng)發(fā)生某個(gè)錯(cuò)誤時(shí),要求程序必須立即停止執(zhí)行。例子10斷言語(yǔ)句有以下兩種格式:
assertbooleanExpression;
assertbooleanExpression:messageException;booleanExpression是求值為boolean型的表達(dá)式;messageException是求值為字符串的表達(dá)式。當(dāng)booleanExpression的值是false時(shí),程序從斷言語(yǔ)句處停止執(zhí)行;當(dāng)booleanExpression的值是true時(shí),程序從斷言語(yǔ)句處繼續(xù)執(zhí)行。在計(jì)算平方根時(shí)使用了斷言語(yǔ)句,運(yùn)行效果如圖。在調(diào)試代碼階段讓斷言語(yǔ)句發(fā)揮作用,這樣就可以發(fā)現(xiàn)一些致命的錯(cuò)誤。程序正式運(yùn)行時(shí)就可以關(guān)閉斷言語(yǔ)句,但仍把斷言語(yǔ)句保留在源代碼中,如果以后應(yīng)用程又需要調(diào)試,可以重新啟用斷言語(yǔ)句。當(dāng)使用java解釋器直接運(yùn)行應(yīng)用程序時(shí),默認(rèn)地關(guān)閉斷言語(yǔ)句,在調(diào)試程序時(shí)可以使用-ea啟用斷言語(yǔ)句,例如java-eamainClass6.7小結(jié)Java支持在一個(gè)類中聲明另一個(gè)類,這樣的類稱作內(nèi)部類,而包含內(nèi)部類的類成為內(nèi)部類的外嵌類。和某類有關(guān)的匿名類就是該類的一個(gè)子類,該子類沒(méi)有明顯的用類
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 運(yùn)營(yíng)助理的年終總結(jié)
- 新生兒輕度窒息的護(hù)理
- 福建省2024八年級(jí)數(shù)學(xué)上冊(cè)第12章整式的乘除12.2整式的乘法3.多項(xiàng)式與多項(xiàng)式相乘課件新版華東師大版
- 人事測(cè)評(píng)課件教學(xué)課件
- 2.1.2碳酸鈉和碳酸氫鈉 說(shuō)課課件 高一上學(xué)期化學(xué)人教版(2019)必修第一冊(cè)
- 洗地機(jī)行業(yè)現(xiàn)狀分析報(bào)告
- 如何寫年終述職報(bào)告
- 肱骨遠(yuǎn)段骨折康復(fù)治療
- 不樣的我教案反思
- 2025文旅景區(qū)蛇年新年國(guó)潮非遺年貨大集主題活動(dòng)策劃方案-111P
- 安全培訓(xùn)總結(jié)及效果評(píng)價(jià)
- 2024年巴黎奧運(yùn)會(huì)
- NB-T+10488-2021水電工程砂石加工系統(tǒng)設(shè)計(jì)規(guī)范
- 青年你為什么要入團(tuán)-團(tuán)員教育主題班會(huì)-熱點(diǎn)主題班會(huì)課件
- 2024年畜禽屠宰企業(yè)獸醫(yī)衛(wèi)生檢驗(yàn)人員考試試題
- 2024年度-《醫(yī)療事故處理?xiàng)l例》解讀
- 中國(guó)銀行內(nèi)部稽核體系簡(jiǎn)介
- 發(fā)育生物學(xué)名詞解釋(最新整理)
- 國(guó)際金融seminar 1
- 幼兒園中班科學(xué)活動(dòng)《玩管子》教案
- 四大文明古國(guó)PPT.ppt
評(píng)論
0/150
提交評(píng)論