第八章-異常處理_第1頁
第八章-異常處理_第2頁
第八章-異常處理_第3頁
第八章-異常處理_第4頁
第八章-異常處理_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第八章異常處理1第八章異常處理8.1異常概述

8.2異常類

8.3異常拋出

8.4異常的捕獲與處理

8.5異常處理的進一步討論

8.6提高與總結

28.1異常概述8.1.1異常的概念8.1.2異常處理機制

3

異常是方法代碼運行時出現(xiàn)的非正常狀態(tài),這種非正常狀態(tài)使程序無法或不能再正常地繼續(xù)往下運行。一些常見的異常包括:數(shù)組下標越界、除數(shù)為零、內存溢出、文件找不到等。這些異常事件發(fā)生后,會導致程序中斷,使程序無法或不能正常運行下去,出現(xiàn)返回錯誤的運行結果、死循環(huán)、死機、莫明其妙的終止等現(xiàn)象。8.1.1異常的概念4舉例(沒有例外處理的情況)1)classExceptionDivideBy0{2)staticvoidmethod(){

intx=0,z=10;

int

y=10/x;

System.out.println(“z=“+z);}publicstaticvoidmain(String[]args){method();

System.out.println("Aftermethod.");}11)}5Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatExceptionDivideBy0.method(ExceptionDivideBy0.java:4)atExceptionDivideBy0.main(ExceptionDivideBy0.java:7)Pressanykeytocontinue...6具有例外處理的情況classExceptionDivideBy0{staticvoidmethod(){

intx=0,z=10;

try{

inty=10/x;

System.out.println(“z=“+z);

}catch(ArithmeticExceptione){

System.out.println("ArithmeticException");

}

System.out.println("Aftertry/catchblocks.");}publicstaticvoidmain(String[]args){method();

System.out.println("Aftermethod.");}}7ArithmeticExceptionAftertry/catchblocks.Aftermethod.Pressanykeytocontinue...88.1.2異常處理機制main()方法的棧結構method()方法的棧結構拋出異常對象傳遞順序遞捕獲處理異常調用順序用圖8-1方法的調用順序和異常的傳遞順序位于棧頂?shù)姆椒檎趫?zhí)行的方法方法調用的出發(fā)點98.1.2異常處理機制(續(xù))

異常處理機制:當一個方法正常執(zhí)行完畢后,Java虛擬機會從調用棧中彈出該方法的棧結構,然后繼續(xù)處理前一個方法。如果在執(zhí)行方法的過程中拋出異常,則Java虛擬機必須找到能處理異常的catch代碼塊。它首先檢查當前方法是否存在這樣的catch代碼塊,如果存在,那么就執(zhí)行該catch代碼塊;否則,Java虛擬機會從調用棧中彈出該方法的棧結構,繼續(xù)到前一個方法中查找合適的catch代碼塊。108.1.2異常處理機制(續(xù))

當Java虛擬機回溯到調用棧的底部方法時,如果仍然沒有找到處理該異常的代碼塊時,按下列步驟處理:⑴調用異常對象的printStackTrace()方法,打印來自方法調用棧的異常信息。⑵如果該線程不是主線程,那么終止這個線程,其他線程繼續(xù)正常運行。如果該線程是主線程,那么整個應用程序被終止。118.1.2異常處理機制(續(xù))一般來說,一個異常處理應該完成以下三個工作(或稱三部曲):⑴拋出異常:根據(jù)異常類型產生異常對象⑵捕獲異常⑶處理異常128.2異常類8.2.1異常類的分類8.2.2系統(tǒng)定義的異常類8.2.3用戶自定義的異常類8.2.4受檢查的異常和不受檢查的異常

138.2.1異常類的分類每個異常由類Throwable或者它的一個子類的實例表示。Throwable類是Object類的直接子類,其本身又有兩個直接子類:Error與Exception類。148.2.1異常類的分類ThrowableErrorExceptionRuntimeException缺省的例外處理程序由用戶捕獲或聲明并處理不做處理用戶自己產生的例外處理158.2.2系統(tǒng)定義的異常類系統(tǒng)定義的異常類有Error類、RuntimeException類和Exception類,它們分別代表某一類異常類型。Error類及其子類:表示災難性的、普通程序很難恢復的例外。一般情況下,程序員可不必理會這類異常,它們雖然很嚴重,但很少發(fā)生。168.2.2系統(tǒng)定義的異常類系統(tǒng)定義的異常類有Error類、RuntimeException類和Exception類,它們分別代表某一類異常類型。Error類及其子類:表示災難性的、普通程序很難恢復的異常。

如:NoClassDefFoundError(類定義沒找到異常)、NoSuchMethodError(調用不存在的方法異常)等。一般情況下,程序員可不必理會這類異常,它們雖然很嚴重,但很少發(fā)生。178.2.2系統(tǒng)定義的異常類(2)RuntimeException類及其子類:表示設計或實現(xiàn)方面的問題。例如:ArithmeticException(算術運算異常)、ArrayIndexOutOfBoundsException(數(shù)組下標越界異常)、NullPointerException(空引用異常)等。一般情況下,這類例外通過程序員正確的設計和實現(xiàn)是可以避免的。188.2.2系統(tǒng)定義的異常類(3)Exception類及其非RuntimeException子類:表示運行時因環(huán)境的影響而引發(fā)的異常,例如:●IOException(輸入輸出異常):在I/O操作失敗或者被中斷時引發(fā)。其子類包括:EOFException、FileNotFoundException、InterruptedIOException等?!馡nterruptedException(中斷異常):當前等待或睡眠線程被其他線程中斷時引發(fā)。這類異常并非因設計或實現(xiàn)引起,是無法避免的。但一般情況下,程序員應該提供相應的代碼捕捉和處理。198.2.3用戶自定義的異常類創(chuàng)建用戶自定義異常時,一般需要完成如下工作:⑴定義一個新的異常類,一般作為Throwable或Exception類的子類,不作為Error的子類。⑵為新的異常類定義屬性和方法,或隱藏父類的屬性和覆蓋父類的方法,使這些屬性和方法能夠體現(xiàn)該類所對應的錯誤信息。自定義異常類的格式為:classMyException

extends

Exception{…//定義新的成員變量…//定義構造方法…//覆蓋原方法,或定義新方法}208.2.3用戶自定義的異常類其中,Exception類的屬性和方法。⑴異常類的構造方法·publicException()創(chuàng)建新異常對象?!ublicException(Stringmessage)創(chuàng)建包含指定異常詳細消息的新異常對象。字符串參數(shù)message,描述異常對象的詳細消息。·publicException(Throwablecause)創(chuàng)建包含指定原因的新異常對象。引用變量參數(shù)cause(原因),描述導致新異常對象拋出的異常對象。·publicException(Stringmessage,Throwablecause)創(chuàng)建包含指定異常詳細消息和指定原因的新異常對象。218.2.3用戶自定義的異常類⑵異常類的方法·publicStringtoString()返回當前異常對象的簡短描述。格式為:“此異常的類名:異常的本地化描述”·publicStringgetMessage()返回描述當前異常對象的詳細消息字符串?!ublicvoidprintStackTrace()在屏幕上輸出當前異常對象使用堆棧的軌跡,即程序中先后調用了哪些方法,使得運行過程中產生了這個異常對象?!ublicThrowable

getCause()返回當前異常對象的原因(cause);如果cause不存在或未知,則返回null?!ublicThrowable

initCause(Throwablecause)將當前異常對象的原因(cause)初始化為指定值。22【例8-3】設計用戶自定義異常類。這樣,當出現(xiàn)計算負數(shù)的平方根時,可輸出提示信息:用戶自定義異常類名:輸入錯誤!。classMyExceptionClass

extendsException{doublex;//定義新的成員變量

MyExceptionClass(doublex){

super("輸入錯誤!"+"x="+x+",當x的平方根為負數(shù)時引發(fā)了自定義異常。");

this.x=x;}publicStringtoString(){

return"MyExceptionClass:輸入錯誤!";}}23【例8-4】設計用戶自定義異常類。這樣,當出現(xiàn)小時不在0~23范圍之內或分秒不在0~59范圍之內的情況時,可輸出提示信息。classTimeExceptionextendsException{privateint

t,m,s;

TimeException(intt,intm,ints){super("時間設置錯誤!,當出現(xiàn)時分秒["+t+":"+m+":"+s+"]不在范圍內時引發(fā)了自定義異常TimeException。");

this.t=t;

this.m=m;

this.s=s;}publicStringtoString(){return"TimeException:時間設置錯誤!["+t+":"+m+":"+s+"]";}}248.2.4受檢查的異常和不受檢查的異常⑴受檢查的異常(編譯時異常):在程序中必須對其進行處理,否則編譯器會指出錯誤。·當一個方法中的代碼拋出一個受檢查的異常時,這個異?;蛘弑环椒ㄖ械膖ry-catch結構捕獲,或者在方法的throws語句中聲明,并由它的調用者處理。兩者必選其一,否則編譯系統(tǒng)將給出錯誤信息?!ぞ幾g器檢查程序,保證所有受檢查的異常都被程序顯式地處理。ObjectThrowableErrorRuntimeExceptionException受檢查異常不受檢查異常子類子類子類圖8-3

受檢查的異常和不受檢查的異常258.2.4受檢查的異常和不受檢查的異常⑵不受檢查的異常:程序中可以不做處理,直接由運行時系統(tǒng)來處理?!@類異常,程序員可以捕捉或聲明拋出,但通??梢圆患永頃?68.3異常拋出8.3.1系統(tǒng)自動拋出的異常8.3.2throw語句拋出的異常

27Java應用程序在運行過程中如果出現(xiàn)一個可識別的錯誤,就會產生一個與該錯誤相對應的異常類對象。這個對象包含了異常的類型和錯誤出現(xiàn)時程序所處的狀態(tài)信息,該異常對象首先會交給Java虛擬機,由Java虛擬機來尋找具體的異常處理者。在Java中,把產生異常對象并將其交給Java虛擬機的過程稱為拋出異常。異常類不同,拋出異常的方法也不同,可分為:·系統(tǒng)自動拋出的異常。一般是系統(tǒng)定義的異常類。·throw語句拋出的異常。一般是用戶自定義的異常類,也可以是系統(tǒng)定義的異常類。288.3.1系統(tǒng)自動拋出的異常Java程序運行過程中時,如果產生的錯誤是屬于系統(tǒng)定義異常類所對應的一個錯誤,那么,系統(tǒng)將自動拋出該類的異常對象。例如,在例8-1中,變量y除以0的算術運算,產生的錯誤對應著算術異常類ArithmeticException,屬于系統(tǒng)定義異常類。系統(tǒng)就會自動拋出ArithmeticException類異常對象。298.3.2throw語句拋出的異常異常既可以在發(fā)生異常情況時由運行系統(tǒng)引發(fā),也可以在程序中用throw語句顯式引發(fā)。throw語句的一般格式如下:throw異常對象;用throw語句拋出異常的一般過程是:⑴指定或定義一個合適的異常類。⑵產生這個類的對象并立即用throw拋出它?!纠?-5】拋出不受檢查的異常舉例。小學生不會負數(shù)加法。當遇到負數(shù)加法時拋出異常對象。308.3.2throw語句拋出的異常classPrimaryAdd{publicdoubleadd(doublea,doubleb){

if(a<0||b<0)

thrownew

ArithmeticException("a<0||b<0"); returna+b; }}publicclassEx8_5{publicstaticvoidmain(String[]args){

PrimaryAdd

obj=newPrimaryAdd(); System.out.println("2+3="+obj.add(2,3)); System.out.println("-2+3="+obj.add(-2,3));}}31程序運行結果:2+3=5.0Exceptioninthread"main"java.lang.ArithmeticException:a<0||b<0atPrimaryAdd.add(Ex8_5.java:3)atEx8_5.main(Ex8_5.java:11)328.3.2throw語句拋出的異?!纠?-6】拋出受檢查的異常舉例。classPrimaryAdd{publicdoubleadd(doublea,doubleb){

if(a<0||b<0)thrownew

Exception("a<0||b<0"); returna+b;}}publicclassEx8_6{publicstaticvoidmain(String[]args){

PrimaryAdd

obj=newPrimaryAdd(); System.out.println("2+3="+obj.add(2,3)); System.out.println("-2+3="+obj.add(-2,3));}}不能通過編譯338.3.2throw語句拋出的異?!纠?.7】拋出受檢查的異常,并用throws子句聲明拋出classPrimaryAdd{publicdoubleadd(doublea,doubleb)throwsException{

if(a<0||b<0)thrownewException("a<0||b<0");returna+b;}}publicclassEx8_7{publicstaticvoidmain(String[]args)throwsException{

PrimaryAdd

obj=newPrimaryAdd();System.out.println("2+3="+obj.add(2,3)); System.out.println("-2+3="+obj.add(-2,3));}}34程序運行結果:

2+3=5.0Exceptioninthread"main"java.lang.Exception:a<0||b<0atPrimaryAdd.add(Ex8_7.java:35)atEx8_7.main(Ex8_7.java:43)358.4異常的捕獲與處理8.4.1try/catch語句

8.4.2多異常的捕獲和處理

368.4.1try/catch語句當一個異常被拋出時,應該有專門的語句來接受這個被拋出的異常對象,這個過程被稱為捕獲異常。在Java程序里,異常的捕獲和處理語句是同時定義的。異常對象是通過try-catch-finally語句來捕捉和處理的。該語句的語法格式如下:378.4.1try/catch語句try{//try子句是一段可能發(fā)生異常的代碼,若發(fā)生異常,由catch子句捕獲并處理;}//不能有其它語句分隔catch(要處理的異常類型1異常引用變量){//異常類型1對象的異常處理代碼;}catch(要處理的異常類型2異常引用變量){//異常類型2對象的異常處理代碼;}…finally{//總是要執(zhí)行的代碼;}…//OtherStatements388.4.1try/catch語句一個異常被拋出后,try語句處理一般分三種情況:⑴try子句內的語句沒有發(fā)生任何異常,如果沒有finally子句,那么跳過catch子句,直接執(zhí)行try語句后面的語句OtherStatements。⑵try子句內的語句發(fā)生異常并被catch子句捕獲,將異常對象的引用值傳遞給catch子句的參數(shù)變量,中斷現(xiàn)有的流程,跳轉到該catch子句,執(zhí)行異常處理語句。如果catch子句沒有產生新的異常對象,執(zhí)行完catch子句后,如果沒有finally子句,就直接執(zhí)行try語句后面的OtherStatements語句。⑶try子句內的語句發(fā)生異常,但是沒有被catch子句捕獲。398.4.1try/catch語句例8-8classPrimaryAdd{publicdoubleadd(doublea,doubleb){ try{

if(a<0||b<0)thrownewException("a<0||b<0"); }catch(Exceptione){

System.out.println("ishandlingthisExceptionobject.");

} returna+b; }}408.4.1try/catch語句publicclassEx8_8{publicstaticvoidmain(String[]args){

PrimaryAdd

obj=newPrimaryAdd(); System.out.println("2+3="+obj.add(2,3)); System.out.println("-2+3="+obj.add(-2,3));

System.out.println("endofEx8_8");}}程序運行結果:2+3=5.0ishandlingthisExceptionobject.-2+3=1.0endofEx8_8418.4.1try/catch語句例8-9classPrimaryAdd{publicdoubleadd(doublea,doubleb)throwsException{

if(a<0||b<0)thrownewException("a<0||b<0"); }

returna+b; }}428.4.1try/catch語句例8-9publicclassEx8_9{publicstaticvoidmain(String[]args){

PrimaryAdd

obj=newPrimaryAdd();

try{ System.out.println("2+3="+obj.add(2,3)); System.out.println("-2+3="+obj.add(-2,3));

}

catch(Exceptione){

System.out.println("mainishandlingthisExceptionobject.");

}

System.out.println("endofEx8_9");}}438.4.1try/catch語句例8-10【例8-10】在例8-3自定義異常類的基礎上,添加代碼,處理該異常。classMyExceptionClass

extendsException{doublex;//定義新的成員變量

MyExceptionClass(doublex){

super("輸入錯誤!"+"x="+x+",當x的平方根為負數(shù)時引發(fā)了自定義異常。");

this.x=x;}publicStringtoString(){

return"MyExceptionClass:輸入錯誤!";}}448.4.1try/catch語句例8-10classSqrtCalculation{voidcalculate(doublex){

try{

if(x<0.0)thrownewMyExceptionClass(x);elseSystem.out.println(Math.sqrt(x));

}catch(MyExceptionClasse){

System.out.println("calculate()ishandlingthisMyExceptionClassobject.");

System.out.println("objectis"+e);

}

}}458.4.1try/catch語句例8-10publicclassEx8_10{publicstaticvoidmain(String[]args){

SqrtCalculation

obj=newSqrtCalculation();obj.calculate(-4);}}程序運行結果:calculate()ishandlingthisMyExceptionClassobject.objectisMyExceptionClass:輸入錯誤!468.4.2多異常的捕獲和處理try語句也允許有多個catch子句,每個catch子句可以捕獲一種類型的異常。每次執(zhí)行try語句時,至多只能有一個異常處理代碼被執(zhí)行。catch子句的排列應該是:先特殊,后一般或先子類,后父類,但只捕獲一次。即處理子類型異常的catch子句一定要放在處理超類型異常的catch子句之前,否則,處理子類型異常的處理代碼就沒有機會被執(zhí)行。478.4.2多異常的捕獲和處理classExceptionDemo{publicstaticvoidmain(String[]args){try{

inta=args.length;

System.out.println("a="+a);

intb=42/a;int[]c={1};c[4]=99;}catch(ArithmeticExceptione){//捕獲算術運算異常

System.out.println("Divideby0:"+e);}catch(ArrayIndexOutOfBoundsExceptione){

System.out.println("Arrayindexoob:"+e);

}

System.out.println("Aftertry/catchblocks.");}}48命令行沒有輸入參數(shù),所以args.length=0,進而a=0,引發(fā)除零異常。命令行輸入任意參數(shù)(如“abc”)后的運行結果是:

a=1java.lang.ArrayIndexOutOfBoundsException:4Aftertry/catchblocks.498.5異常處理的進一步討論8.5.1沒有捕獲的異常8.5.2catch子句拋出的異常8.5.3構造方法拋出的異常8.5.4finally子句508.5.1沒有捕獲的異常當try子句發(fā)生異常時,如果沒有一個catch子句能夠捕捉到,則按下列步驟進行處理:⑴由外層try語句處理⑵由調用方法處理⑶由Java虛擬機執(zhí)行默認程序518.5.2catch子句拋出的異常try子句發(fā)生的異??梢杂烧Z句中的某個catch子句捕捉處理,但在執(zhí)行catch子句內的異常處理代碼時也可能再拋出新的異常。此時,原先的異常被遺棄,新的異常從try語句拋出并沿著方法調用棧反方向傳遞。該新異?;蛘哂赏鈱觮ry語句的catch子句捕捉,或者由方法的調用者處理。528.5.3構造方法拋出的異?!纠?-15】在例8-4自定義的TimeException類基礎上,對構造方法拋出的異常進行異常處理。classTimeExceptionextendsException{privateint

t,m,s;

TimeException(intt,intm,ints){super("時間設置錯誤!,當出現(xiàn)時分秒["+t+":"+m+":"+s+"]不在范圍內時引發(fā)了自定義異常TimeException。");

this.t=t;this.m=m;this.s=s;}publicStringtoString(){return"TimeException:時間設置錯誤!["+t+":"+m+":"+s+"]";}}538.5.3構造方法拋出的異常classMyTime{privateinthour;//0~23privateintminute;//0~59privateintsecond;//0~59publicMyTime(int

h,int

m,ints)throwsTimeException{

if(h<0||h>=24||m<0||m>=60||s<0||s>=60){thrownewTimeException(h,m,s);}hour=h;minute=m;second=s;}}548.5.3構造方法拋出的異常publicclassEx8_15{publicstaticvoidmain(String[]arg){

MyTimet; try{ t=newMyTime(11,69,10); }catch(TimeExceptione){

System.out.println("toString()is"+e.toString());

System.out.println("getMessage()is"+e.getMessage()); }

System.out.println("finish!");}}55程序運行結果:toString()isTimeException:時間設置錯誤![11:69:10]getMessage()is時間設置錯誤!,當出現(xiàn)時分秒[11:69:10]不在范圍內時引發(fā)了自定義異常TimeException。finish!568.5.4finally子句只要離開try語句,都要先執(zhí)行finally子句。在try語句中,finally子句和catch子句至少出現(xiàn)一個。publicvoidoperateFile(){try{openfile;read/writefile;//可能拋出Exception異常

}catch(Exceptione){handleException;}finally{closefile;}}

578.5.4finally子句控制流離開try語句的情況可分為以下幾種:⑴try子句代碼正常執(zhí)行,沒有拋出異常;⑵try子句代碼執(zhí)行時拋出異常,但被catch子句捕捉處理;⑶try子句代碼執(zhí)行時拋出異常,但沒有catch子句能夠捕捉處理;⑷try子句代碼執(zhí)行時拋出異常,且被catch子句捕捉,但在執(zhí)行異常處理代碼時發(fā)生新的異常。588.6提高與總結8.6.1異常處理機制和編程方法總結8.6.2銀行取款的異常處理8.6.3職員年齡的異常處理598.6.1異常處理機制和編程方法總結Java語言采用面向對象的方法來處理異常。其異常處理機制是:⑴當方法執(zhí)行過程中出現(xiàn)錯誤而干擾了程序正常流程時,會拋出一個異常,即構造出一個異常類的對象。⑵異常類對象代表當前出現(xiàn)的一個具體異常,該對象封裝了異常的有關信息。608.6.1異常處理機制和編程方法總結⑶Java虛擬機在方法調用棧中尋找能處理該異常的catch子句。它首先檢查當前方法是否存在這樣的catch子句,如果存在,那么就執(zhí)行該catch子句;否則,沿方法調用棧中調用順序的反方向,傳遞異常對象,尋找能處理該異常的catch子句。如果始終沒有這樣的catch子句,Java虛擬機打印方法調用棧的異常信息,終止當前線程。該異常處理機制對應的Java語句是:try-catche-finally語句。618.6.2銀行取款的異常處理【例8-17】在定義銀行類時,若取錢數(shù)大于余額則作為異常處理。

classInsufficientFundsExceptionextendsException{privateBankexcepbank;privatedoubleexcepAmount;

InsufficientFundsException(Bank

ba,doubledAmount){

excepbank=ba;

excepAmount=dAmount;}628.6.2銀行取款的異常處理publicStringtoString(){Stringstr="Thebalance"+excepbank.getbalance()+",Thewithdrawalwas"+excepAmount;returnstr;}}classBank{doublebalance;//余額

Bank(doubleb){balance=b;}638.6.2銀行取款的異常處理publicvoiddeposite(double

dAmount){//存錢

if(dAmount>0.0)balance+=dAmount;}publicvoidwithdrawal(double

dAmount)throwsInsufficientFundsException{if(balance<dAmount){thrownewInsufficientFundsException(this,dAmount);}balance=balance-dAmount;}publicdoublegetbalance(){//獲取余額

returnbalance;}}648.6.2銀行取款的異常處理publicclassEx8_17{publicstaticvoidmain(String[]args){ try{Bankba=newBank(50);ba.withdrawal(100);

System.out.println("Withdrawalsuccessful!");}catch(Exceptione){

System.out.println(e);}}}65程序運行結果:

Thebalance50.0,Thewithdrawalwas100.0668.6.3職員年齡的異常處理【例8-18】職員年齡異常。當職員的年齡大于60歲或小于18歲時作異常處理。classAgeGreater60ExceptionextendsException{privateEmployeeexcepEmployee;privateint

excepAge;publicAgeGreater60Exception(EmployeeexcepEmployee,int

excepAge){

super(excepEmploye

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論