【ch07】異常處理和輸入輸出_第1頁
【ch07】異常處理和輸入輸出_第2頁
【ch07】異常處理和輸入輸出_第3頁
【ch07】異常處理和輸入輸出_第4頁
【ch07】異常處理和輸入輸出_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

異常處理和輸入/輸出Java程序設(shè)計第七章01異常處理7.1異常處理異常在程序的編寫過程中,難免會遇到出現(xiàn)錯誤或者意外的情況。程序中的語法錯誤,可以被Java編譯系統(tǒng)發(fā)現(xiàn),必須在編譯階段排除,否則程序無法運行。一個程序即使在編譯階段沒有問題,在運行時還是可能出現(xiàn)各種各樣的意外情況。例如,用戶輸入數(shù)據(jù)出錯、所需文件找不到、運行時磁盤空間不足、內(nèi)存空間不足、數(shù)組下標(biāo)越界等。這樣的錯誤通常稱為異常(Exception)。7.1.1什么是異常7.1異常處理【例7-1】程序中的異常示例?!境绦颉俊境绦蛘f明】程序運行時輸入3,程序運行正常,輸出為3。程序運行時輸入3.0,“b=in.nextInt()”語句執(zhí)行時出現(xiàn)InputMismatchException異常,顯示為:7.1異常處理程序運行時輸入0,“System.out.print(a/b)”語句執(zhí)行時出現(xiàn)ArithmeticException異常,顯示為:如果程序沒有處理異常,Java系統(tǒng)會終止程序執(zhí)行并把異常信息直接輸出,從用戶的角度來說,任何異常都沒有實際意義,絕大多數(shù)的用戶也根本看不懂異常信息,這會給用戶造成十分不好的印象,程序容易出錯,即使這種錯誤是用戶的輸入錯誤造成的。作為程序設(shè)計者,要力爭做到程序能夠排除環(huán)境錯誤的干擾,即在出現(xiàn)意外情況時仍可以繼續(xù)運行,至少要給出適當(dāng)?shù)奶崾荆@就是異常處理的任務(wù)。7.1異常處理異常主要分為3類:Exception、RuntimeException和Error,這3類異常都是Throwable的子類。直接從Exception中派生的各個異常類型是檢查型異常(CheckedException)。RuntimeException類的各個子類則沒有異常處理的強(qiáng)制性需求。Error則是一系列很難通過程序解決的問題,這些問題基本上是無法恢復(fù)的,如內(nèi)存空間不足等。7.1異常處理try-catch-finally結(jié)構(gòu)try-catch-finally結(jié)構(gòu)可以用來捕捉(catch)和處理異常。將可能發(fā)生異常的程序語句放在try程序塊中,將處理異常的語句放在catch程序塊中。try-catch-finally結(jié)構(gòu)可以不包含finally塊。如果結(jié)構(gòu)中包含了finally塊,那么不論異常是否發(fā)生,finally塊中的語句總會執(zhí)行。7.1.2用try-catch-finally結(jié)構(gòu)處理異常7.1異常處理【例7-2】程序中的異常處理?!境绦颉?.1異常處理【程序說明】如果運行時輸入3,try語句塊中的語句正常執(zhí)行,未出現(xiàn)異常。接下來先執(zhí)行finally語句塊中的語句,再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句。程序輸出結(jié)果為:如果運行時輸入3.0,語句“b=in.nextInt()”拋出InputMismatchException異常,于是不再執(zhí)行try語句塊的剩余語句(也就是語句“System.out.println(a/b)”不被執(zhí)行)。接下來先跳轉(zhuǎn)到InputMismatchException異常對應(yīng)的catch語句塊執(zhí)行,然后執(zhí)行finally語句塊,再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句,程序輸出結(jié)果為:7.1異常處理【程序說明】如果運行時輸入0,語句“b=in.nextInt()”正常執(zhí)行,語句“System.out.println(a/b)”拋出ArithmeticException異常,但程序中沒有給出處理該異常的catch語句塊,Java系統(tǒng)首先顯示描述異常信息的字符串,然后執(zhí)行finally語句塊,再終止程序的運行,也就是不再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句。程序輸出結(jié)果為:7.1異常處理多catch結(jié)構(gòu)由于try語句塊可能產(chǎn)生多種不同的異常,這就要求定義多個catch語句塊實現(xiàn)多異常處理機(jī)制,每個catch語句塊接收和處理一個異常對象,至于一個異常對象能否被一個catch語句塊所接收,取決于異常與該語句塊的異常參數(shù)匹配情況。7.1.3用多catch結(jié)構(gòu)處理異常7.1異常處理【例7-3】多catch結(jié)構(gòu)示例?!境绦颉俊境绦蛘f明】如果運行時輸入3,try語句塊中的語句正常執(zhí)行,未出現(xiàn)異常。接下來先執(zhí)行finally語句塊中的語句,再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句。程序輸出結(jié)果為:7.1異常處理【程序說明】如果運行時輸入3.0,語句“b=in.nextInt()”拋出InputMismatchException異常,于是不再執(zhí)行try語句塊的剩余語句(也就是語句“System.out.println(a/b)”不被執(zhí)行)。接下來先跳轉(zhuǎn)到InputMismatchException異常對應(yīng)的catch語句塊執(zhí)行,然后執(zhí)行finally語句塊,再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句,程序輸出結(jié)果為:如果運行時輸入0,語句“b=in.nextInt()”正常執(zhí)行,語句“System.out.println(a/b)”拋出ArithmeticException異常,接下來先跳轉(zhuǎn)到IArithmeticException異常對應(yīng)的catch語句塊執(zhí)行,然后執(zhí)行finally語句塊,再執(zhí)行try-catch-finally結(jié)構(gòu)后面的語句,程序輸出結(jié)果為:7.1異常處理多catch結(jié)構(gòu)程序中會聲明許多方法,這些方法中的語句可能引發(fā)異常,如果不希望直接在這個方法中對異常進(jìn)行處理,就可以在聲明方法時使用throws聲明拋出異常,然后在調(diào)用該方法的其他方法中對異常進(jìn)行處理。如果需要使用throws聲明拋出多個異常,各異常之間要用逗號分隔。throws聲明拋出異常的語法格式如下:7.1.4用throws聲明拋出異常7.1異常處理【例7-4】用throws聲明拋出異常。【程序】【程序說明】方法中聲明的異常是throws子句中指定的異常類或其子類的實例。例如,在方法的說明中指明方法可能產(chǎn)生IOException的實例,但是實際上拋出的異?;蛟S是EOFException類的實例,這些異常都是IOException子類的實例。將getChar()方法中可能產(chǎn)生的異常通過throws語句進(jìn)行聲明,將異常交給調(diào)用者(本例中是main()方法)進(jìn)行捕獲和處理。02輸入/輸出處理7.2輸入/輸出處理輸入/輸出處理輸入/輸出處理是程序設(shè)計中非常重要的部分,方便易用的輸入和輸出可以使程序和用戶之間產(chǎn)生良好的交互。Java語言的輸入/輸出功能強(qiáng)大而靈活,在Java類庫中,IO部分的內(nèi)容是很龐大的,因為它涉及的領(lǐng)域很廣泛:標(biāo)準(zhǔn)輸入/輸出、文件的操作、網(wǎng)絡(luò)上的數(shù)據(jù)流等。Java的輸入/輸出功能是通過數(shù)據(jù)流的方式實現(xiàn)的。7.2輸入/輸出處理數(shù)據(jù)流數(shù)據(jù)流是一個很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)的時候,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件、內(nèi)存或網(wǎng)絡(luò)連接。類似地,當(dāng)程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流。這時候,數(shù)據(jù)就像在這其中“流動”一樣。流式輸入/輸出的特點是數(shù)據(jù)的獲取和發(fā)送沿數(shù)據(jù)序列的順序進(jìn)行,即每個數(shù)據(jù)都必須等待排在它前面的數(shù)據(jù)讀入或送出之后才能被讀寫,每次讀寫操作處理的都是序列中剩余的未讀寫數(shù)據(jù)中的第一個,而不能隨意選擇輸入/輸出的位置。7.2.1什么是數(shù)據(jù)流7.2輸入/輸出處理【例7-5】接收鍵盤輸入的若干字符,統(tǒng)計并輸出其中數(shù)字字符的個數(shù)。【程序】【運行結(jié)果】輸入:輸出:【程序說明】System.in是InputStream類的對象,用于從鍵盤上輸入數(shù)據(jù)。System.in.read()方法用于從鍵盤上讀取一字節(jié),但返回值是int型,因此向ch賦值時,需要強(qiáng)制類型轉(zhuǎn)換。System.in.read()方法聲明拋出IOException異常,程序中需要用try-catch語句捕獲處理異常,或者用throwsIOException聲明拋出異常。此外,由于在編寫輸入/輸出程序時,使用了IOException以及其他輸入/輸出流類,因此需要引用java.io包中的類。程序中的System.out是PrintStream類的對象,用于向屏幕輸出數(shù)據(jù)。7.2輸入/輸出處理7.2.2通過FileReader輸入流讀文件文件有文本文件、圖像文件、聲音文件等類型,文本文件中存放的是字符序列。FileReader是字符輸入流類,可用于讀取文本文件,F(xiàn)ileReader的常用方法有:(1)publicFileReader(StringfileName):構(gòu)造方法,參數(shù)fileName是字符串,用于指定要讀取文件的文件名。(2)intread():讀取一個字符,返回值為讀取字符的編碼。(3)intread(charcbuf[]):讀取多字節(jié),放置到字節(jié)數(shù)組cbuf中,通常讀取的字節(jié)數(shù)量為cbuf的長度,返回值為實際讀取的字節(jié)的數(shù)量。如果輸入流已結(jié)束,則返回?1。7.2輸入/輸出處理(4)intread(charcbuf[],intoff,intlen)throwsIOException:讀取len個字符到數(shù)組cbuf[]中,從數(shù)組cbuf[]的下標(biāo)off處開始存放,返回值為實際讀取的字符數(shù)量。(5)longskip(longn):在輸入流中跳過n個字符不讀,返回值為實際跳過的字符數(shù)。(6)abstractvoidclose():關(guān)閉該流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。上述方法都可聲明拋出異常,其中構(gòu)造方法拋出FileNotFoundException類異常,其他方法拋出IOException類異常,F(xiàn)ileNotFoundException是IOException的子類。編程時調(diào)用這些方法時,可以用try-catch結(jié)構(gòu)捕獲處理,也可以聲明拋出。7.2輸入/輸出處理編寫讀取文本文件的程序一般遵循如下步驟:(1)創(chuàng)建FileReader類對象,用于讀取指定文件;(2)通過FileReader類對象讀取文件;(3)關(guān)閉數(shù)據(jù)流,釋放相關(guān)資源。7.2輸入/輸出處理【例7-6】利用字符流讀文件?!境绦颉俊境绦蛘f明】程序要讀文件d:\a.txt,由于反斜杠(\)是轉(zhuǎn)義字符,所以用字符串"d:\\a.txt"作為參數(shù),指定要讀取文件的文件名。read()方法從文件中讀取一個字符,返回值為字符的編碼,類型為int。所以變量ch的類型定義為int。程序中利用while循環(huán)反復(fù)讀寫文件,每次讀取一個字符,直到輸入流結(jié)束,也就是read()的返回值為?1。7.2輸入/輸出處理7.2.3通過FileWriter輸出流寫文件FileWriter是字符輸出流,用于以字符方式向文件中寫入數(shù)據(jù)。FileWriter的常用方法有:(1)publicFileWriter(StringfileName):構(gòu)造方法,fileName是要打開的文件名。如果指定文件存在,則覆蓋文件內(nèi)容,如果指定文件不存在,則創(chuàng)建一個新文件。(2)publicFileWriter(StringfileName,Booleanappend):構(gòu)造方法,fileName是要打開的文件名。如果append的值為true,則在原文件的尾部添加數(shù)據(jù),否則覆蓋原文件內(nèi)容。如果指定文件不存在,則創(chuàng)建一個新文件。7.2輸入/輸出處理7.2.3通過FileWriter輸出流寫文件(3)voidwrite(intc):將整型值c的低16位寫入輸出流。(4)voidwrite(Stringstr):將字符串str中的字符寫入輸出流。(5)voidwrite(charcbuf[],intoff,intlen):將字符數(shù)組cbuf[]中從索引off處開始的len個字符寫入輸出流。(6)voidwrite(Stringstr,intoff,intlen)throwsIOException:將字符串str中從索引off處開始的len個字符寫入輸出流。(7)close():關(guān)閉輸出流。7.2輸入/輸出處理【例7-7】利用FileReader類和FileWriter類實現(xiàn)文件復(fù)制?!境绦颉俊境绦蛘f明】FileWriter的構(gòu)造方法拋出FileNotFoundException異常,write()方法和close()方法拋出IOException異常。本程序用try-catch結(jié)構(gòu)捕獲和處理異常。程序創(chuàng)建文件字符輸入流對象和文件字符輸出流對象,分別用于讀文件和寫文件。每次循環(huán)從文件中讀入一個字符,再寫入目標(biāo)文件。7.2輸入/輸出處理7.2.4通過字節(jié)流讀寫文件所有文件都是由8位的字節(jié)組成的。如果文件字節(jié)中的內(nèi)容被解釋為字符,則文件可稱為文本文件;如果被解釋為其他含義,則文件可稱為二進(jìn)制文件。例如,字處理軟件Word產(chǎn)生的doc文件中,數(shù)據(jù)可被解釋為字體、格式、圖形和其他非字符信息,這樣的文件是二進(jìn)制文件,一般不能用Reader流正確讀取。如果希望以字節(jié)為單位讀寫文件,則可以利用FileInputStream和FileOutputStream兩個文件字節(jié)流類。7.2輸入/輸出處理【例7-8】利用FileInputStream類和FileOutputStream類實現(xiàn)文件復(fù)制?!境绦颉俊境绦蛘f明】不難發(fā)現(xiàn),F(xiàn)ileInputStream類和FileOutputStream類的方法在形式和功能上與FileReader類和FileWriter類的方法非常相似,實際上,在程序編寫環(huán)節(jié),其與前面兩小節(jié)介紹的內(nèi)容也非常相似,區(qū)別僅在于字節(jié)流以字節(jié)為單位讀取文件,而字符流以字符為單位讀取文件。7.2輸入/輸出處理7.2.5File類File類的常用方法有:(1)booleancreateNewFile():創(chuàng)建一個新文件。(2)booleanmkdir():創(chuàng)建新的文件夾。(3)booleandelete():刪除文件或者文件夾。(4)booleanexists():判斷當(dāng)前文件或者文件夾是否存在。(5)booleanisDirectory():判斷File對象代表的是否是一個文件夾。(6)StringgetParent():返回當(dāng)前File對象的父級文件夾。(7)String[]list():返回當(dāng)前File對象包含的子文件夾及文件。(8)intlength():獲取文件長度。(9)longlastModified():獲取最后一次修改的時間。(10)listFiles():返回文件夾下的文件或者文件夾對象(File類實例),包含隱藏文件。7.2輸入/輸出處理【例7-9】利用File類獲取文件屬性?!境绦颉俊境绦蛘f明】在main()方法中創(chuàng)建了File類對象,通過這個File類對象可以獲取文件的屬性,如文件是否存在、文件大小,也可以用delete()方法刪除文件。如果要讀寫文件內(nèi)容,還是需要創(chuàng)建文件輸入/輸出流對象。FileInputStream和FileOutputStream類的構(gòu)造方法的參數(shù)不僅可以是前面一直在使用的字符串,也可以是本例中采用的File類對象。7.2輸入/輸出處理7.2.6通過RandomAccessFile類讀寫文件RandomAccessFile類的常用方法有:(1)finalintreadInt():從文件中讀取一個整數(shù)(4字節(jié))。(2)finalStringreadLine():從文件中讀取一行后轉(zhuǎn)為String。(3)longgetFilePointer():返回文件位置指針的當(dāng)前位置。(4)voidseek(longpos):將文件位置指針定位到pos位置。(5)finalvoidwriteChars(Strings):將字符串寫入文件。(6)finalvoidwriteInt(intv):將一個整數(shù)(4字節(jié))寫入該文件。(7)longlength():返回此文件的長度。7.2輸入/輸出處理RandomAccessFile對象的文件位置指針遵循以下規(guī)律:(1)新建RandomAccessFile對象的文件位置指針位于文件的開頭處。(2)每次讀寫操作之后,文件位置的指針都相應(yīng)后移到讀寫的字節(jié)處。(3)可以通過getFilePointer()方法獲得文件位置指針的位置,通過seek()方法設(shè)置文件位置指針的位置。7.2輸入/輸出處理【例7-10】用RandomAccessFile類讀寫文件。先將50以內(nèi)的素數(shù)寫入文件,再讀取并顯示?!境绦颉俊境绦蛘f明】程序創(chuàng)建RandomAccessFile數(shù)據(jù)流,將"rw"傳遞給了構(gòu)造方法的第二個參數(shù),這樣隨機(jī)訪問既可用于從文件中讀取數(shù)據(jù),也可用于向文件寫入數(shù)據(jù)。前面的for循環(huán)由小到大搜索素數(shù),并逐一寫入文件,語句raf.seek(0)把讀寫指針定位在文件的起始位置。后面的for循環(huán)讀取文件中的數(shù)據(jù)并顯示。【程序】03序列化7.3序列化對象的持久性對象的持久性是指對象所具有的保存和加載其狀態(tài)的能力,即長久保存一個對象的狀態(tài)并在需要時獲取該對象的信息,以重新構(gòu)造一個狀態(tài)完全相同的對象。這種保存和恢復(fù)對象狀態(tài)的過程稱為對象序列化。對象序列化對象序列化的主要任務(wù)是,寫出對象的狀態(tài)信息,并遍歷該對象對其他對象的引用,遞歸地序列化所有被引用到的其他對象,從而建立一個完整的序列化流。7.3序列化7.3.1序列化類實現(xiàn)Serializable接口ObjectOutputStream只能對Serializable接口的類的對象進(jìn)行序列化。默認(rèn)情況下,ObjectOutputStream按照默認(rèn)方式進(jìn)行序列化,這種序列化方式僅僅對對象的非transient的實例變量進(jìn)行序列化,而不會序列化對象的transient的實例變量,也不會序列化靜態(tài)變量。當(dāng)ObjectOutputStream按照默認(rèn)方式反序列化時,具有如下特點:(1)如果在內(nèi)存中對象所屬的類還沒有被加載,則先加載并初始化這個類。如果在classpath中不存在相應(yīng)的類文件,則拋出ClassNotFoundException異常;(2)在反序列化時不會調(diào)用類的任何構(gòu)造方法。7.3序列化有些對象中包含一些敏感信息,這些信息不宜對外公開。如果按照默認(rèn)方式對它們進(jìn)行序列化,那么它們的序列化數(shù)據(jù)在網(wǎng)絡(luò)上傳輸時,可能會被不法分子竊取。對于這類信息,可以對它們進(jìn)行加密后再序列化,而在反序列化時則需要解密,再恢復(fù)為原來的信息。默認(rèn)的序列化方式會序列化整個對象圖,這需要遞歸遍歷對象圖(也就是說,對象中的基本類型屬性和對象屬性都能夠被序列化)。如果對象圖很復(fù)雜,遞歸遍歷操作需要消耗很多的空間和時間,它內(nèi)部的數(shù)據(jù)結(jié)構(gòu)為雙向列表。在應(yīng)用時,如果將某些成員變量都改為transient類型,能節(jié)省空間和時間,提高序列化的性能。7.3序列化7.3.2實現(xiàn)Externalizable接口Externalizable接口繼承自Serializable接口,如果一個類實現(xiàn)了Externalizable接口,那么將完全由這個類控制自身的序列化行為。Externalizable接口中聲明了兩個方法:前者負(fù)責(zé)序列化操作,后者負(fù)責(zé)反序列化操作。在對實現(xiàn)了Externalizable接口的類的對象進(jìn)行反序列化時,會先調(diào)用類的不帶參數(shù)的構(gòu)造方法,這是有別于默認(rèn)反序列方式的。如果把類的不帶參數(shù)的構(gòu)造方法刪除,或者把該構(gòu)造方法的訪問權(quán)限設(shè)置為private、protected或省略級別,會拋出java.io.InvalidException:novalidconstructor異常。7.3序列化7.3.3可序列化類的不同版本的序列化兼容性serialVersionUID的默認(rèn)值是Java運行時環(huán)境根據(jù)類的內(nèi)部細(xì)節(jié)自動生成的。如果對類的源代碼進(jìn)行了修改,再重新編譯,新生成的類文件的serialVersionUID的取值有可能也會發(fā)生變化。類的serialVersionUID的默認(rèn)值完全依賴于Java編譯器,對于同一個類,用不同的Java編譯器編譯,可能會產(chǎn)生不同的serialVersionUID(也可能相同)。為了提高serialVersionUID的獨立性和確定性,建議在一個可序列化類中顯式地定義serialVersionUID,為它賦予明確的值。7.3序列化顯式地定義serialVersionUID有兩個作用:(1)在某些場合,希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有相同的serialVersionUID。(2)在某些場合,不希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有不同的serialVersionUID。7.3序列化【例7-11】實現(xiàn)Student對象的存儲?!境绦蛘f明】在main()方法中創(chuàng)建了ObjectOutputStream類的對象,通過調(diào)用ObjectOutputStream類的對象的writeObject()方法,實現(xiàn)Student對象的存儲。7.3序列化【例7-12】實現(xiàn)對Student對象的讀取。【運行結(jié)果】【程序說明】在main()方法中創(chuàng)建了ObjectInputStream類的對象,然后調(diào)用ObjectInputStream類的對象的readObject()方法,就可以獲取Student對象,接著通過showInfo()方法顯示學(xué)生信息。04范例7.4范例【例7-13】文本文件的凱撒加密。凱撒加密的基本思想是,通過把字母移動一定的位數(shù)來實現(xiàn)加密。例如,如果位數(shù)是3,明文字母B就變成了密文的E,以此類推,X將變成A,Y將變成B,Z將變成C?!痉治觥渴紫壤肍ileReader將待加密內(nèi)容中的每個字符取出,然后針對每個字符分別移位,再利用FileWriter將移位得到的字符寫入文件?!境绦颉?.4范例【例7-14】用字節(jié)輸入/輸出流實現(xiàn)文件復(fù)制?!痉治觥恳宰止?jié)流的方式實現(xiàn)文件的復(fù)制功能,F(xiàn)ileInputStream和FileOutputStream是常用的兩個類。基于數(shù)組實現(xiàn)一次多字節(jié)的讀寫,顯然比逐字節(jié)讀寫效率高。而緩沖輸入流BufferedInputStream和緩沖輸出流BufferedOutputStream又可以進(jìn)一步顯著提高復(fù)制的效率。與內(nèi)存相比,硬盤的存取速度是非常慢的。如果傳輸?shù)奈募容^大,直接讀寫硬盤就會比較耗時。如果先把要存儲的數(shù)

溫馨提示

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

評論

0/150

提交評論