任務(wù)定義用戶齡的異常類(lèi)_第1頁(yè)
任務(wù)定義用戶齡的異常類(lèi)_第2頁(yè)
任務(wù)定義用戶齡的異常類(lèi)_第3頁(yè)
任務(wù)定義用戶齡的異常類(lèi)_第4頁(yè)
任務(wù)定義用戶齡的異常類(lèi)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

任務(wù)定義用戶齡的異常類(lèi)第一頁(yè),共五十一頁(yè),2022年,8月28日

5.1任務(wù)描述

學(xué)生在線考試系統(tǒng)中,用戶注冊(cè)需要輸入年齡,若輸入不合理的年齡,我們將在程序中拋出異常,并做相關(guān)處理。為此,本章任務(wù)是自定義一個(gè)關(guān)于年齡的異常類(lèi)。第二頁(yè),共五十一頁(yè),2022年,8月28日

5.2技術(shù)要點(diǎn)

在進(jìn)行程序設(shè)計(jì)時(shí),錯(cuò)誤的產(chǎn)生是不可避免的,其中錯(cuò)誤包括語(yǔ)法錯(cuò)誤和運(yùn)行錯(cuò)誤。一般稱(chēng)編譯時(shí)被檢測(cè)出來(lái)的錯(cuò)誤為語(yǔ)法錯(cuò)誤,這種錯(cuò)誤一旦產(chǎn)生程序?qū)⒉槐贿\(yùn)行。然而,并非所有錯(cuò)誤都能在編譯期間檢測(cè)到,有些問(wèn)題可能會(huì)在程序運(yùn)行時(shí)才暴露出來(lái)。例如,想打開(kāi)的文件不存在、網(wǎng)絡(luò)連接中斷、受控操作數(shù)超出預(yù)定范圍、除數(shù)為0等。這類(lèi)在程序運(yùn)行時(shí)代碼序列中產(chǎn)生的出錯(cuò)情況稱(chēng)為運(yùn)行錯(cuò)誤。這種運(yùn)行錯(cuò)誤倘若沒(méi)有及時(shí)進(jìn)行處理,可能會(huì)造成程序中斷、數(shù)據(jù)遺失乃至系統(tǒng)崩潰等問(wèn)題。這種運(yùn)行錯(cuò)誤也就是我們常說(shuō)的“異?!?。第三頁(yè),共五十一頁(yè),2022年,8月28日在不支持異常處理的傳統(tǒng)程序設(shè)計(jì)語(yǔ)言中,設(shè)計(jì)的程序要包含很長(zhǎng)的代碼來(lái)識(shí)別潛在的運(yùn)行錯(cuò)誤的條件。傳統(tǒng)的檢測(cè)錯(cuò)誤的方法包括使用一些可以設(shè)置為真或假的變量來(lái)對(duì)錯(cuò)誤進(jìn)行捕獲,相似的錯(cuò)誤條件必須在每個(gè)程序中分別處理,這顯然麻煩而且低效。例如在C語(yǔ)言中,通過(guò)使用if語(yǔ)句來(lái)判斷是否出現(xiàn)了錯(cuò)誤,同時(shí),要調(diào)用函數(shù)并通過(guò)被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的錯(cuò)誤事件并進(jìn)行處理。這種錯(cuò)誤處理機(jī)制會(huì)導(dǎo)致把大部分精力花在出錯(cuò)處理上;且只把能夠想到的錯(cuò)誤考慮到,對(duì)其他情況無(wú)法處理;程序可讀性也很差,大量的錯(cuò)誤處理代碼混雜在程序中;出錯(cuò)返回信息量太少,無(wú)法更確切地了解錯(cuò)誤狀況或原因。第四頁(yè),共五十一頁(yè),2022年,8月28日例5-1的程序中沒(méi)有任何異常處理的相關(guān)代碼,編譯時(shí)能順利通過(guò),但運(yùn)行時(shí)屏幕顯示如圖5-1所示的界面,并中斷程序的運(yùn)行。

例5-1TestException.java

1classTestException1{

2publicstaticvoidmain(Stringargs[]){

3inta=8,b=0;

4intc=a/b;//除數(shù)為0,出現(xiàn)異常

5System.out.print(c);

6}

7}第五頁(yè),共五十一頁(yè),2022年,8月28日?qǐng)D5-1運(yùn)行時(shí)錯(cuò)誤提示第六頁(yè),共五十一頁(yè),2022年,8月28日程序出錯(cuò)原因是因?yàn)槌龜?shù)為0。Java發(fā)現(xiàn)這個(gè)錯(cuò)誤之后,便由系統(tǒng)拋出“ArithmeticException”這個(gè)類(lèi)的異常,用來(lái)說(shuō)明錯(cuò)誤的原因,以及出錯(cuò)的位置是在TestException1.java程序中的第4行,并停止運(yùn)行程序。因此,如果沒(méi)有編寫(xiě)處理異常的程序代碼,則Java的默認(rèn)異常處理機(jī)制會(huì)先拋出異常,然后終止程序運(yùn)行。第七頁(yè),共五十一頁(yè),2022年,8月28日上例中出現(xiàn)的異常比較簡(jiǎn)單,在編程中完全可以避免,但是有的異常在程序的編寫(xiě)過(guò)程中是無(wú)法預(yù)知的。例如,要訪問(wèn)的文件不存在,網(wǎng)絡(luò)連接的過(guò)程中發(fā)生中斷等。為了處理程序運(yùn)行中一些無(wú)法避免的異常,Java語(yǔ)言提供了異常處理機(jī)制,為方法的異常終止和出錯(cuò)處理提供了清楚的接口,同時(shí)將功能代碼和異常處理的代碼進(jìn)行分開(kāi)編寫(xiě)。第八頁(yè),共五十一頁(yè),2022年,8月28日5.2.1異常類(lèi)

1.異常類(lèi)的層次結(jié)構(gòu)

Java中的所有異常都是Throwable類(lèi)或子類(lèi),而Throwable類(lèi)又直接繼承于Object類(lèi)。Throwable類(lèi)有兩個(gè)子類(lèi):類(lèi)與類(lèi)。Exception類(lèi)又進(jìn)一步細(xì)分為RuntimeException(運(yùn)行異常)類(lèi)和Non-RuntimeException(非運(yùn)行異常)類(lèi)。圖5-2顯示了各異常之間的繼承關(guān)系。第九頁(yè),共五十一頁(yè),2022年,8月28日?qǐng)D5-2異常類(lèi)的層次結(jié)構(gòu)第十頁(yè),共五十一頁(yè),2022年,8月28日

2.Error類(lèi)及其子類(lèi)

Error類(lèi)專(zhuān)門(mén)用來(lái)處理嚴(yán)重影響程序運(yùn)行的錯(cuò)誤,一般情況下我們不會(huì)設(shè)計(jì)程序代碼去捕捉這種錯(cuò)誤,其原因在于即使捕捉到它,也無(wú)法給予適當(dāng)?shù)奶幚怼@?,虛擬機(jī)錯(cuò)誤、動(dòng)態(tài)鏈接失敗等。表5-1列出一些常見(jiàn)的Error類(lèi)。第十一頁(yè),共五十一頁(yè),2022年,8月28日表5-1常見(jiàn)的Error類(lèi)第十二頁(yè),共五十一頁(yè),2022年,8月28日

3.Exception類(lèi)及其子類(lèi)

相對(duì)于Error類(lèi),Exception類(lèi)包含了一般性的異常,這些異常通常在捕捉到之后可以做一些妥善的處理,以確保程序繼續(xù)運(yùn)行。從異常類(lèi)的繼承層次結(jié)構(gòu)圖中可以看出,Exception類(lèi)的若干子類(lèi)中包含運(yùn)行時(shí)異常類(lèi)(RuntimeException)和非運(yùn)行時(shí)異常類(lèi)。第十三頁(yè),共五十一頁(yè),2022年,8月28日

1)運(yùn)行時(shí)異常

運(yùn)行異常是在Java運(yùn)行系統(tǒng)執(zhí)行過(guò)程中的異常,對(duì)于RuntimeException類(lèi)的異常,即使不編寫(xiě)異常處理的程序代碼,依然可以編譯成功,因?yàn)樵摦惓J窃诔绦蜻\(yùn)行時(shí)才有可能發(fā)生的,例如算術(shù)異常(除數(shù)為0)、數(shù)組下標(biāo)越界等。由于這類(lèi)異常產(chǎn)生得比較頻繁,并且通過(guò)仔細(xì)編程完全可以避免。如果顯式地通過(guò)異常處理機(jī)制去處理,則會(huì)影響整個(gè)程序的運(yùn)行效率。因此,對(duì)于RuntimeException類(lèi),一般由系統(tǒng)自動(dòng)檢測(cè),并將它們交給缺省的異常處理程序。表5-2列出幾種常見(jiàn)的運(yùn)行時(shí)異常類(lèi)。第十四頁(yè),共五十一頁(yè),2022年,8月28日表5-2常見(jiàn)運(yùn)行時(shí)異常類(lèi)第十五頁(yè),共五十一頁(yè),2022年,8月28日

2)非運(yùn)行時(shí)異常

非運(yùn)行時(shí)異常是由編譯器在編譯時(shí)檢測(cè)是否會(huì)發(fā)生在方法的執(zhí)行過(guò)程中的異常。對(duì)于非運(yùn)行時(shí)的異常類(lèi),即使通過(guò)仔細(xì)編程也無(wú)法避免。例如,要訪問(wèn)的文件不存在等情況。這類(lèi)異常通常都在JDK說(shuō)明文檔中定義的方法后面通過(guò)throws關(guān)鍵字將異常拋出,編程時(shí)必須捕獲并做相應(yīng)處理。如圖5-3所示,類(lèi)中定義了read方法:

publicintread(CharBuffertarget)throwsIOException

在編程中,若要使用read方法,則必須對(duì)其可能產(chǎn)生的IOException異常進(jìn)行捕獲和相應(yīng)的處理。第十六頁(yè),共五十一頁(yè),2022年,8月28日?qǐng)D類(lèi)的read方法第十七頁(yè),共五十一頁(yè),2022年,8月28日表5-3列出了常見(jiàn)的非運(yùn)行時(shí)異常。第十八頁(yè),共五十一頁(yè),2022年,8月28日表5-3常見(jiàn)的非運(yùn)行時(shí)異常第十九頁(yè),共五十一頁(yè),2022年,8月28日5.2.2異常的捕獲和處理

例5-1中異常發(fā)生后,系統(tǒng)自動(dòng)把這個(gè)異常拋了出來(lái),但是拋出來(lái)之后沒(méi)有程序代碼去捕捉(catch)異常并進(jìn)行相應(yīng)的處理。Java中的異常處理是由try、catch與finally三個(gè)關(guān)鍵字所組成的程序塊進(jìn)行的。其語(yǔ)法為

try{

正常程序段,可能拋出異常;

}

catch(異常類(lèi)1異常變量){

捕捉異常類(lèi)1有關(guān)的處理程序段;第二十頁(yè),共五十一頁(yè),2022年,8月28日

}

catch(異常類(lèi)2異常變量){

捕捉異常類(lèi)2有關(guān)的處理程序段;

}

finally{

一定會(huì)運(yùn)行的程序代碼;

}第二十一頁(yè),共五十一頁(yè),2022年,8月28日

1.try塊——捕獲異常

try用于監(jiān)控可能發(fā)生異常的程序代碼塊是否發(fā)生異常,如果發(fā)生異,try部分將拋出異常類(lèi)所產(chǎn)生的對(duì)象并立刻結(jié)束執(zhí)行,而轉(zhuǎn)向異常處理代碼catch部分。try塊中。對(duì)于系統(tǒng)產(chǎn)生的異常或程序塊中未用try監(jiān)視所產(chǎn)生的異常,將一律由Java運(yùn)行系統(tǒng)自動(dòng)將異常對(duì)象拋出。第二十二頁(yè),共五十一頁(yè),2022年,8月28日

2.catch塊——處理異常

拋出的對(duì)象如果屬于catch()括號(hào)內(nèi)欲捕獲的異常類(lèi),則catch會(huì)捕獲此異常,然后進(jìn)入到catch塊里繼續(xù)運(yùn)行。catch包括兩個(gè)參數(shù):一個(gè)是類(lèi)名,指出捕獲的異常類(lèi)型,必須是Throwable類(lèi)的子類(lèi);一個(gè)是參數(shù)名,用來(lái)引用被捕獲的對(duì)象。catch塊所捕獲的對(duì)象并不需要與它的參數(shù)類(lèi)型精確匹配,它可以捕獲參數(shù)中指出的異常類(lèi)的對(duì)象及其所有子類(lèi)的

對(duì)象。第二十三頁(yè),共五十一頁(yè),2022年,8月28日在catch塊中,對(duì)異常處理的操作根據(jù)異常的不同而執(zhí)行不同的操作。例如,可以進(jìn)行錯(cuò)誤恢復(fù)或者退出系統(tǒng),通常的操作是打印異常的相關(guān)信息,包括異常的名稱(chēng)、產(chǎn)生異常的方法名、方法調(diào)用的完整、執(zhí)行棧的軌跡等。異常類(lèi)常用方法如表5-4所示。第二十四頁(yè),共五十一頁(yè),2022年,8月28日表5-4異常類(lèi)常用方法第二十五頁(yè),共五十一頁(yè),2022年,8月28日例5-2TryCatchDemo.java

1publicclassTryCatchDemo{

2publicstaticvoidmain(Stringargs[]){

3try{

4inta=8,b=0;

5intc=a/b;

6System.out.print(c);

7}

8catch(ArithmeticExceptione){第二十六頁(yè),共五十一頁(yè),2022年,8月28日

9System.out.println(“發(fā)生的異常簡(jiǎn)短描述是:"+e.getMessage());

10System.out.println("發(fā)生的異常詳細(xì)信息是:"+e.toString());

11}

12}

13}

程序運(yùn)行結(jié)果如圖5-4所示。第二十七頁(yè),共五十一頁(yè),2022年,8月28日?qǐng)D5-4try-catch示例第二十八頁(yè),共五十一頁(yè),2022年,8月28日

3.finally塊——清除工作

finally塊是可選的,通過(guò)finally語(yǔ)句可以為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的處理。不論在try代碼塊中是否發(fā)生了異常,finally代碼塊中的語(yǔ)句都會(huì)被執(zhí)行。通常在finally語(yǔ)句中可以進(jìn)行資源的清除工作。例如,關(guān)閉打開(kāi)的文件,刪除臨時(shí)文件等。

例5-3TryCatchFinally.java

1publicclassTryCatchFinally{

2publicstaticvoidmain(Stringargs[]){

3try{第二十九頁(yè),共五十一頁(yè),2022年,8月28日

4intarr[]=newint[5];

5arr[5]=100;

6}catch(ArrayIndexOutOfBoundsExceptione){

7System.out.println("數(shù)組越界!");

8}catch(Exceptione){

9System.out.println("捕獲所有其他Exception類(lèi)異常!");

10}

11finally{

12 System.out.println("程序無(wú)條件執(zhí)行該語(yǔ)句!");

13}第三十頁(yè),共五十一頁(yè),2022年,8月28日

14}

15}

程序運(yùn)行結(jié)果為

數(shù)組越界!

程序無(wú)條件執(zhí)行該語(yǔ)句!

第三十一頁(yè),共五十一頁(yè),2022年,8月28日當(dāng)代碼中可能出現(xiàn)多種異常時(shí),可以分別用多個(gè)catch語(yǔ)句捕獲,往往將最后一個(gè)catch子句的異常類(lèi)指定為所有異常類(lèi)的父類(lèi)Exception,這樣可以在發(fā)生的異常不能和catch子句中所提供的異常類(lèi)型匹配時(shí),將異常全部交于catch(Exceptione)對(duì)應(yīng)的程序代碼來(lái)處理。但要注意,異常子類(lèi)必須在其任何父類(lèi)之前使用,若將catch(Exceptione)作為第一條catch子句,則所有異常將被其捕獲,而不能執(zhí)行其后的catch子句。第三十二頁(yè),共五十一頁(yè),2022年,8月28日5.2.3異常的拋出

異常的拋出可以分為兩大類(lèi):一類(lèi)是由系統(tǒng)自動(dòng)拋出(例5-2和例5-3);另一類(lèi)則是通過(guò)關(guān)鍵字throw將異常對(duì)象顯式地拋出。顯式拋出異常從某種程度上實(shí)現(xiàn)了將處理異常的代碼從正常流程代碼中分離開(kāi),使得程序的主線相對(duì)完整,同時(shí)增加了程序的可讀性和可維護(hù)性。異常沿著調(diào)用層次向上拋出,交由調(diào)用它的方法來(lái)處理。

異常拋出的語(yǔ)法如下:

thrownew異常類(lèi)();

其中,異常類(lèi)必須為T(mén)hrowable類(lèi)及其子類(lèi)。第三十三頁(yè),共五十一頁(yè),2022年,8月28日例5-4TestException2.java

1classTestException2

2{staticvoidthrowOne(inti)

3{if(i==0)

4thrownewClassNotFoundException();

5}

6publicstaticvoidmain(Stringargs[])

7{

8throwOne(0);

9}

10}第三十四頁(yè),共五十一頁(yè),2022年,8月28日例5-4中,方法throwOne()通過(guò)throw將產(chǎn)生的classNotFoundException的異常對(duì)象拋出。但是該程序仍然有編譯錯(cuò)誤,這是因?yàn)樵趖hrowOne()方法處沒(méi)有進(jìn)行異常類(lèi)的聲明,同時(shí)在main()方法中沒(méi)有對(duì)異常進(jìn)行捕獲和處理。第三十五頁(yè),共五十一頁(yè),2022年,8月28日5.2.4異常的聲明

如果程序中定義的方法可能產(chǎn)生異常,可以直接在該方法中捕獲并處理該異常,也可以向上傳遞,由調(diào)用它的方法來(lái)處理異常。這時(shí)需要在該方法名后面進(jìn)行異常的聲明,表示該方法中可能有異常產(chǎn)生。一個(gè)throws子句列出了可能拋出的異常類(lèi)型。若該方法中可能拋出多個(gè)異常,則將異常類(lèi)型用逗號(hào)分隔。第三十六頁(yè),共五十一頁(yè),2022年,8月28日包括throws子句的方法聲明的一般格式如下:

<類(lèi)型說(shuō)明>方法名(參數(shù)列表)throws<異常類(lèi)型列表>

{

方法體;

}第三十七頁(yè),共五十一頁(yè),2022年,8月28日例5-5TestException3.java

1classTestException3{

2staticvoidthrowOne(inti)throwsArithmeticException{

3if(i==0)

4thrownewArithmeticException("i值為零");

5}

6publicstaticvoidmain(Stringargs[]){

7try{

8throwOne(0);

9}第三十八頁(yè),共五十一頁(yè),2022年,8月28日

10catch(ArithmeticExceptione){

11 System.out.println(“已捕獲到異常錯(cuò)誤:"+e.getMessage());

12}

13}

14}

程序運(yùn)行結(jié)果為

已捕獲到異常錯(cuò)誤:i值為零第三十九頁(yè),共五十一頁(yè),2022年,8月28日5.2.5自定義異常類(lèi)

Java系統(tǒng)定義了有限的異常用以處理可以預(yù)見(jiàn)的、較為常見(jiàn)的運(yùn)行錯(cuò)誤,對(duì)于某個(gè)應(yīng)用所特有的運(yùn)行錯(cuò)誤,有時(shí)則需要?jiǎng)?chuàng)建自己的異常類(lèi)來(lái)處理特定的情況。用戶自定義的異常類(lèi),只需繼承一個(gè)已有的異常類(lèi)就可以了,包括繼承Execption類(lèi)及其子類(lèi),或者繼承已自定義好的異常類(lèi)。如果沒(méi)有特別說(shuō)明,可以直接用Execption類(lèi)作為父類(lèi)。第四十頁(yè),共五十一頁(yè),2022年,8月28日自定義類(lèi)的格式如下:

class異常類(lèi)名extendsException

{

}

由于Exception類(lèi)并沒(méi)有定義它自己的任何方法,而它繼承了Throwable類(lèi)提供的方法,所以,任何異常都繼承了Throwabe定義的方法,常用方法如表5-4所示。也可以在自定義的異常類(lèi)中覆蓋這些方法中的一個(gè)或多個(gè)方法。第四十一頁(yè),共五十一頁(yè),2022年,8月28日自定義異常不能由系統(tǒng)自動(dòng)拋出,只能在方法中通過(guò)throw關(guān)鍵字顯式地拋出異常對(duì)象。使用自定義異常的步驟如下:

(1)首先通過(guò)繼承類(lèi)聲明自定義的異常類(lèi)。

(2)在方法的聲明部分用throws語(yǔ)句聲明該方法可能拋出的異常。

(3)在方法體的適當(dāng)位置創(chuàng)建自定義異常類(lèi)的對(duì)象,并用throw語(yǔ)句將異常拋出。

(4)調(diào)用該方法時(shí)對(duì)可能產(chǎn)生的異常進(jìn)行捕獲,并處理異常。第四十二頁(yè),共五十一頁(yè),2022年,8月28日例5-6演示了如何創(chuàng)建自定義的異常類(lèi)以及如何通過(guò)throw關(guān)鍵字拋出異常。

例5-6MyException.java

1classMyExceptionextendsException{

2privateintnum;

3MyException(inta){

4num=a;

5}

6publicStringtoString(){

7return"MyException["+num+"]";

8}第四十三頁(yè),共五十一頁(yè),2022年,8月28日

9}

10classExceptionDemo{

11staticvoidtest(inti)throwsMyException{

12System.out.println("調(diào)用test("+i+")");

13if(i>10)

14thrownewMyException(i);

15System.out.println("正常退出");

16}

17publicstaticvoidmain(Stringargs[]){

18try{

19test(5);第四十四頁(yè),共五十一頁(yè),2022年,8月28日

20test(15);

21}

22catch(MyExceptione){

23System.out.println(''捕捉''+e.toString());

24}

25}

26}

程序運(yùn)行結(jié)果為

調(diào)用test(5)

正常退出

調(diào)用test(15)

捕捉MyException[15]第四十五頁(yè),共五十一頁(yè),2022年,8月28日

5.3任務(wù)實(shí)施

例5-7中是自定義年齡異常,當(dāng)輸入的年齡大于50或小于18時(shí),將拋出異常。

例5-7Age.java

1classAgeExceptionextendsException{

2Stringmessage;

3AgeException(Stringname,intm){

4message=name+"的年齡"+m+"不正確";

5}

6publicStringtoString(){第四十六頁(yè),共五十一頁(yè),2022年,8月28日

7returnmessage;

8}

9}

10classUser{

11privateintage=1;

12privateStringname;

13User(Stringname){

14 =name;

15}

16publicvoidsetAge(intage)throwsAgeException{

17if(age>=50||age<=18)第四十七

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論