Java程序設(shè)計(jì)基礎(chǔ)(第2版) 課件 第5章 異常(第2版)_第1頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)(第2版) 課件 第5章 異常(第2版)_第2頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)(第2版) 課件 第5章 異常(第2版)_第3頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)(第2版) 課件 第5章 異常(第2版)_第4頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)(第2版) 課件 第5章 異常(第2版)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(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)介

異常1內(nèi)容5.1異常的拋出與捕獲 5.2處理異常 5.3自定義異常 2異常正常(normal)的程序沿著控制流執(zhí)行。在執(zhí)行過(guò)程中可能會(huì)發(fā)生某事件導(dǎo)致程序無(wú)法繼續(xù)沿著控制流執(zhí)行,這種不期望發(fā)生的事件稱為異常(exception)。異常是“異常事件(exceptionalevent)”的簡(jiǎn)稱。3上課正常流程4打開(kāi)投影等設(shè)備;DO

教師在講臺(tái)上講解;

板書(shū);

沒(méi)有粉筆

提問(wèn);WHILE下課時(shí)間未到宣布下課;關(guān)閉投影等設(shè)備異常發(fā)生打開(kāi)投影等設(shè)備;DO

教師在講臺(tái)上講解;

板書(shū);

沒(méi)有粉筆

提問(wèn);WHILE下課時(shí)間未到宣布下課;關(guān)閉投影等設(shè)備5其它教室尋找粉筆拋出程序把異常事件創(chuàng)建為“異常對(duì)象”并傳遞給Java虛擬機(jī),這個(gè)過(guò)程稱為“拋出(throw)”。異常對(duì)象中包含了錯(cuò)誤信息以及程序在異常出現(xiàn)時(shí)的狀態(tài)。異常是“少而不同”的事件,并不總會(huì)發(fā)生。6捕獲如果程序需要對(duì)可能發(fā)生異常事件按預(yù)案進(jìn)行處理,那么程序就設(shè)計(jì)一段代碼首先從虛擬機(jī)中取出異常對(duì)象,這個(gè)過(guò)程稱為“捕獲(catch)”,然后再進(jìn)行處理7例子在第3行首先創(chuàng)建了一個(gè)只具有三個(gè)元素的數(shù)組對(duì)象,即數(shù)組的長(zhǎng)度為3,按照J(rèn)ava語(yǔ)言對(duì)數(shù)組的訪問(wèn)規(guī)則,應(yīng)分別通過(guò)a[0]、a[1]和a[2]訪問(wèn)這三個(gè)數(shù)組對(duì)象。然而第4行的語(yǔ)句卻試圖訪問(wèn)a[3]。當(dāng)程序執(zhí)行到第4行的語(yǔ)句時(shí),println方法就會(huì)向虛擬機(jī)拋出ArrayIndexOutOfBoundsException類(lèi)型的異常對(duì)象由于程序沒(méi)有設(shè)計(jì)任何預(yù)案來(lái)應(yīng)對(duì)該異常,程序終止執(zhí)行8ArrayIndexOutOfBoundsExceptionDemo.java例第4行試圖訪問(wèn)靜態(tài)變量a;而a沒(méi)有引用任何數(shù)組對(duì)象,其初值為null。所以當(dāng)程序運(yùn)行到第4行會(huì)拋出空指針異常,并在控制臺(tái)輸出如下消息后終止執(zhí)行9NullPointerExceptionDemo.java異常類(lèi)運(yùn)行時(shí)刻異常RuntimeException也稱為免檢(unchecked)異常所謂“免檢”,指這類(lèi)異常導(dǎo)致程序無(wú)法繼續(xù)執(zhí)行下去,只能終止,不必為這類(lèi)異常設(shè)計(jì)處理程序;而Exceptin類(lèi)的其它子類(lèi)都是受檢(checked)異常所謂“受檢”,指程序必須安排預(yù)案,一旦異常出現(xiàn)如何處置。10例子從文件data.txt中讀取體重。1134

56.7

58

25FileNotFoundExceptionDemo.javaIOException是典型的受檢異常。FileNotFoundException是一種IOExceptinon。受檢異常編譯器強(qiáng)制在程序中必須對(duì)可能出現(xiàn)的IOException進(jìn)行處理。處理的方法有兩種:捕獲聲明拋出聲明拋出是較為簡(jiǎn)單的處理方法:如果在方法體中可能拋出某類(lèi)型的異常,那么只許把該異常類(lèi)型在方法頭部使用保留字throws聲明拋出即可。該方法的調(diào)用者看到這個(gè)聲明,再進(jìn)行處理。12處理方法:聲明拋出13

1importjava.util.Scanner;2importjava.io.File;3importjava.io.FileNotFoundException;4publicclassFileNotFoundExceptionDemo{5publicstaticvoidmain(String[]args)throwsFileNotFoundException{6Scannersc=newScanner(newFile("input.txt"));7System.out.println(sc.nextLine());8sc.close();9}10}

拋給方法的調(diào)用者,由方法的調(diào)用者處理處理方法:捕獲異常141importjava.util.Scanner;

2importjava.io.File;

3importjava.io.FileNotFoundException;

4public

classCatchDemo{

5

public

static

voidmain(String[]args){

6Scannersc=null;

7

try

{

8sc=newScanner(newFile("input.txt"));

9System.out.println(sc.nextLine());

10sc.close();

11}catch(FileNotFoundExceptione){

12e.printStackTrace();

13System.out.println(e.getMessage());

14}

15}

16}把可能拋出異常的程序片段使用保留字try后的一對(duì)大括號(hào)“{}”中。這對(duì)大括號(hào)括起來(lái)的語(yǔ)句序列稱為try塊(tryblock)。把對(duì)異常處理的程序片段放在保留字catch后面的大括號(hào)中,這對(duì)大括號(hào)“{}”括起來(lái)的語(yǔ)句序列稱為catch塊引用異常對(duì)象為了在catch塊中引用try塊中拋出的異常對(duì)象,在保留字catch其后的catch塊之間使用小括號(hào)“()”括起來(lái)了異常對(duì)象引用變量聲明。第12行調(diào)用了實(shí)例方法printStackTrace輸出異常對(duì)象的棧跟蹤信息,這是給程序員看,用來(lái)調(diào)試程序用的;第13行調(diào)用了實(shí)例方法getMessage輸出異常提示消息,這是給最終用戶看的。執(zhí)行catch塊完畢,繼續(xù)執(zhí)行try-catch語(yǔ)句的后隨語(yǔ)句。15拋出和捕獲在某次運(yùn)行中,try塊中的某條語(yǔ)句可能會(huì)拋出異常對(duì)象,此例中是FileNotFoundException類(lèi)型的異常對(duì)象;這個(gè)異常對(duì)象交給了JVM;程序的控制發(fā)生轉(zhuǎn)移,轉(zhuǎn)到catch塊執(zhí)行;catch塊通過(guò)聲明的FileNotFoundException類(lèi)型的引用變量e訪問(wèn)try塊中拋出的異常對(duì)象,一旦e能夠引用這個(gè)異常對(duì)象,則稱捕捉到了該異常。16除了RuntimeException以外,其它Exception類(lèi)的后代類(lèi)都是受檢異常。對(duì)于所有受檢異常,程序必須顯示地聲明如何進(jìn)行處理。17try-with-resource語(yǔ)句try塊中第8行的語(yǔ)句拋出異常,那么就不會(huì)執(zhí)行第10行的關(guān)閉語(yǔ)句close(),從無(wú)法釋放資源。解決方法清理現(xiàn)場(chǎng)和釋放資源的語(yǔ)句都放到finally塊中try-with-resource18FinallyDemo.java一般形式try{……}catch(Exception<引用變量名>){……}finally{……}19無(wú)論異常發(fā)生與否,finally塊總會(huì)執(zhí)行try塊至少與之關(guān)聯(lián)一個(gè)catch塊try-with-resource聲明及創(chuàng)建Scanner對(duì)象的語(yǔ)句移到保留字try與大括號(hào)間的小括號(hào)中這樣無(wú)需使用finally塊可以通過(guò)分號(hào)分隔,聲明多個(gè)資源論異常是否拋出,占用的資源都會(huì)被自動(dòng)釋放20WithResourceDemo.javaWithMultiResourceDemo一個(gè)try塊關(guān)聯(lián)多個(gè)catch塊如果try塊中拋出異常,Java的異常處理系統(tǒng)就自上而下依次將該異常的類(lèi)型與catch中聲明的類(lèi)型進(jìn)行匹配(match)一旦匹配,就執(zhí)行相應(yīng)的catch塊,catch塊執(zhí)行完畢,則整個(gè)try-catch語(yǔ)句執(zhí)行完畢,繼續(xù)執(zhí)行該語(yǔ)句的后隨語(yǔ)句匹配的意思是:拋出的異常對(duì)象的引用能夠合法地賦值異常處理器聲明的參數(shù)21MultiCatchDemo.java異常的匹配如果當(dāng)前文件夾中沒(méi)有input.txt則拋出FileNotFoundException異常;如果有input.txt但里面是空的,一行也沒(méi)有,則拋出NoSuchElementException異常;如果試圖讀取input.txt時(shí)使用的對(duì)象已經(jīng)關(guān)閉,則拋出IllegalStateException異常。22注意下面的try-catch語(yǔ)句中所有期望的異常都能賦值給第一個(gè)catch塊中的e,導(dǎo)致其它c(diǎn)atch塊不會(huì)被執(zhí)行23try{...}catch(Exceptione){System.out.println(e.getMessage());}catch(IOExceptione){System.out.println(e.getMessage());}catch(FileNotFoundExceptione){System.out.println(e.getMessage());}異常的匹配一個(gè)try塊與三個(gè)catch塊相關(guān)聯(lián)。自上而下,catch塊聲明的異常類(lèi)型分別是FileNotFoundExceptionNoSuchElementExceptionIllegalStateException如果在try塊中拋出了FileNotFoundException類(lèi)型的異常對(duì)象,由于該類(lèi)型與FileNotFoundException匹配,那么執(zhí)行的是第一個(gè)catch塊;如果在try塊中拋出了NoSuchElementException類(lèi)型的異常對(duì)象,由于該類(lèi)型與NoSuchElementException匹配,那么執(zhí)行的是第二個(gè)catch塊;如果在try塊中拋出了IllegalStateException類(lèi)型的異常對(duì)象,由于該類(lèi)型與IllegalStateException匹配,那么執(zhí)行的是第三個(gè)catch塊。24異常的匹配把期望捕獲的異常通過(guò)|聲明在一起25MultiCatchInOneDemo.java拋出和捕獲Java程序把異常事件作為對(duì)象傳遞給JVM,這個(gè)對(duì)象就稱為“異常對(duì)象”。這個(gè)過(guò)程稱為“拋出異常(throwinganexception)”。異常對(duì)象中包含了錯(cuò)誤信息以及程序在異常出現(xiàn)時(shí)的狀態(tài)。負(fù)責(zé)對(duì)異常進(jìn)行處理的程序需要從JVM中取出異常對(duì)象,這個(gè)過(guò)程稱為“捕獲”。26拋出和捕獲使用try-catch語(yǔ)句把可能產(chǎn)生異常的語(yǔ)句安排在try塊中把對(duì)異常進(jìn)行處理的語(yǔ)句安排在catch塊中27總結(jié):try-catch保留字try以及其后由一對(duì)大括號(hào)“{}”括起來(lái)的語(yǔ)句序列稱為try塊(tryblock)。try塊中的語(yǔ)句有可能拋出異常。保留字catch、緊跟其后的有小括號(hào)“()”括起來(lái)的異常對(duì)象引用變量聲明、以及其后由一對(duì)大括號(hào)“{}”括起來(lái)的語(yǔ)句序列稱為catch塊。一旦try塊中的某條語(yǔ)句拋出異常對(duì)象,就不再繼續(xù)執(zhí)行該語(yǔ)句以及其后隨語(yǔ)句,而是轉(zhuǎn)移到catch塊執(zhí)行。28總結(jié):try-catch執(zhí)行catch塊時(shí),通過(guò)聲明的異常對(duì)象引用變量(例如e)可以訪問(wèn)異常對(duì)象的具體內(nèi)容。執(zhí)行catch塊完畢,繼續(xù)執(zhí)行try-catch語(yǔ)句的后隨語(yǔ)句。29異常處理器catch塊中處理異常的代碼稱為異常處理器(exceptionhandler)。30異常的傳播methodA是methodB的調(diào)用者,將來(lái)methodA在執(zhí)行含有methodB調(diào)用的語(yǔ)句時(shí)可能會(huì)產(chǎn)生異常。此時(shí)methodA同樣有兩種異常處理方式可供選擇:捕獲拋出31異常的傳播如果methodA使用throws聲明把異常交給調(diào)用者處理,那么在其調(diào)用者main方法中又遇到同樣問(wèn)題。當(dāng)然main方法同樣有兩種異常處理方式可供選擇:捕獲拋出32異常的傳播main方法是整個(gè)程序的入口,如果一個(gè)異常對(duì)象由main方法聲明拋出,交由調(diào)用者處理,那么JVM就會(huì)輸出一些異常對(duì)象的信息,然后中止程序執(zhí)行。33總結(jié)Java異常處理系統(tǒng)的任務(wù)就是當(dāng)程序中的異常發(fā)生后,為其尋找異常處理器。這個(gè)尋找是沿著方法的調(diào)用反向進(jìn)行,直到main方法。34方法調(diào)用鏈35注意如果拋出異常的語(yǔ)句在try塊中,但是該異常不能與try-catch語(yǔ)句中的任何catch塊聲明的異常類(lèi)型相匹配,那么該異常就沿著方法調(diào)用鏈向調(diào)用者方向傳播。36捕獲異常main調(diào)用了方法methodA,而methodA調(diào)用了methodB。假設(shè)在方法methodB拋出異常。如果該異常類(lèi)型匹配ExceptionB,那么這個(gè)異常就被捕捉到并進(jìn)行處理。如果該異常類(lèi)型不匹配ExceptionB,那么停止執(zhí)行methodB,控制返回到調(diào)用者methodA對(duì)方法methodB的調(diào)用語(yǔ)句處。如果異常類(lèi)型與methodB所在try-catch語(yǔ)句中的異常處理器聲明的異常類(lèi)型ExceptionA匹配,那么就執(zhí)行該異常處理器。37捕獲異常如果該異常類(lèi)型也不匹配ExceptionA,那么停止執(zhí)行methodA,控制返回到調(diào)用者main對(duì)方法methodA的調(diào)用語(yǔ)句處。如果異常類(lèi)型與methodA所在try-catch語(yǔ)句中的異常處理器聲明的異常類(lèi)型ExceptionM匹配,那么就執(zhí)行該異常處理器。如果該異常類(lèi)型仍然與ExceptionM不匹配,程序終止。38注意(一)一個(gè)try塊至少有一個(gè)catch塊關(guān)聯(lián),可與多個(gè)catch塊關(guān)聯(lián);(二)finally塊可有可無(wú);(三)必須聲明如何處理受檢異常;(四)異常對(duì)象由程序中某個(gè)方法在執(zhí)行期間拋出給JVM,而catch塊則聲明要求JVM交遞的異常;(五)如果JVM存在某個(gè)異常對(duì)象,但沒(méi)有找到等待該異常的任何catch塊,則JVM終止程序運(yùn)行;(六)不能在finally塊中使用return。在finally塊中的return返回后方法結(jié)束執(zhí)行,不會(huì)再執(zhí)行try塊中的return語(yǔ)句。39注意如果catch塊中有return語(yǔ)句,仍然先執(zhí)行finally塊,再return;如果catch塊中有System.exit()語(yǔ)句,則不會(huì)執(zhí)行finally塊。405.3自定義異常41例java.lang.Math類(lèi)的類(lèi)方法addExact,該方法把給定的兩個(gè)int類(lèi)型參數(shù)求和,如果加法運(yùn)算的結(jié)果溢出,超出了int類(lèi)型整數(shù)的范圍,那么拋出ArithmeticException異常。42publicstaticintaddExact(intx,inty){intr=x+y;//Overflowiff//bothargumentshavetheoppositesignoftheresultif(((x^r)&(y^r))<0){thrownewArithmeticException("integeroverflow");}returnr;}MathDemo.java第4行把2和3相加,結(jié)果沒(méi)有溢出;第5行把在java.lang.Integer中定義的整數(shù)最大值MAX_VALUE即0x7fffffff與2相加,發(fā)生溢出例形式參數(shù)年齡為負(fù)數(shù)則拋出異常43NegativeAgeExceptionDemo.java定義異常自定義異常需要做三件事情:定義異常;聲明異常拋出;捕獲異常。其中,前兩件事情做好之后,第三件事情就與前文講述的異常的捕獲和處理一樣了。一般通過(guò)繼承java.lang.Exception定義異常類(lèi)44例setAge()方法在參數(shù)大于等于0時(shí),執(zhí)行正常流程;否則,應(yīng)當(dāng)拋出異常。45AgeExceptionDemo.java定義異常首先定義一個(gè)新的異常類(lèi)型。46OutOfAgeRangeException.java聲明拋出定義好異常類(lèi)型后,修改setAge方法,使其拋出異常對(duì)象。這個(gè)修改有兩個(gè)地方:在合適的位置添加throw語(yǔ)句;在方法的頭部使用throws聲明拋出。47捕獲異常經(jīng)過(guò)以上兩個(gè)步驟:定義了異常類(lèi)型在方法中聲明和拋出了異常,接下來(lái)就和使用JDK中異常一樣,捕獲自定義異常OutOfRangeException了48自定義異常通常需要設(shè)計(jì)一個(gè)以給最終用戶看的異常提示消息為參數(shù)的構(gòu)造方法,該方法通常通過(guò)調(diào)用父類(lèi)的帶有字符串參數(shù)的構(gòu)造函數(shù)來(lái)完成在適當(dāng)位置拋出在方法的頭部使用throwsMyCustomException聲明本方法可能會(huì)拋出異常。如果自定義異常是RuntimeException則無(wú)需在方法頭部聲明拋出。調(diào)用可能拋出自定義異常的方法的地方用try-catch塊捕獲并處理該異常49MyCustomExceptionUtils.javaUtilsDemo.java異常處理過(guò)程catch塊執(zhí)行完畢后去執(zhí)行finally塊和try-catch語(yǔ)句的后續(xù)語(yǔ)句50ProcessDemo.javaJava異常處理機(jī)制的優(yōu)勢(shì)Java異常處理機(jī)制提供了把異常處理代碼從正常處理代碼中分離出來(lái)的能力。在傳統(tǒng)程序設(shè)計(jì)里,負(fù)責(zé)異常處理的代碼和正常的代碼流程交織混雜,降低了可讀性和可維護(hù)性。51包裝為自定義異常在catch塊中不能僅僅輸出一些信息,還得要有流程控制語(yǔ)句以避免繼續(xù)執(zhí)行trycatch語(yǔ)句的后續(xù)語(yǔ)句。一個(gè)很常見(jiàn)的做法是捕獲標(biāo)準(zhǔn)異常并包裝為自定義異常包裝異常時(shí),一定要把原始的異常設(shè)置為cause(Exception有構(gòu)造方法可以傳入cause)52WrapDemo.java例:彈棧pop可返回null53publicclassArrayStackimplementsStack{

privateObject[]objectArray; privateinttopOfStack; privatestaticfinalintCAPACITY=128; publicObjectpop(){ if(this.isEmpty()) returnnull; else{ returnobjectArray[topOfStack--]; } } publicbooleanisEmpty(){ returntopOfStack==-1; } …}例:彈棧pop可返回null(續(xù))54publicstaticvoidmain(String[]args){Stacks=newArrayStack();Objectitem=s.pop();if(item==null){//調(diào)用者負(fù)責(zé)判斷返回值

System.out.println("Thestackisempty.");else{System.out.println("Theelementonthetophasbeenreleased.");}}例問(wèn)題是:完成正常處理流程的語(yǔ)句:System.out.println("Theelementonthetophasbeenreleased.");

嵌入在了狀態(tài)檢查語(yǔ)句中,而且一般都安排在最后,即排除了各種異常情形后才執(zhí)行。這樣,在讀程序的時(shí)候,迫使讀者先去閱讀和理解異常處理的情形,而不是先去閱讀和理解正常流程的處理。畢竟,異常情形發(fā)生的可能性很低。55例客戶代碼還得必須使用一個(gè)特殊的方法返回值獲取這個(gè)方法執(zhí)行正常與否的狀態(tài)。上面的ArrayStack的客代碼使用一個(gè)特殊的返回值null判斷pop方法執(zhí)行狀態(tài)以便進(jìn)行相應(yīng)處理。有的時(shí)候很難約定一個(gè)特殊的返回值。56使用異常57publicObjectpop()throwsException{if(this.isEmpty()){thrownewException(this+"isempty");}else{returnobjectArray[topOfStack--];}}publicstaticvoidmain(String[]args){Stacks=newArrayStack();Objectitem;try{item=s.pop();}catch(Exceptione){System.out.println(e.getMessage());}}異常處理版本的文件讀寫(xiě)try-catch-finallytrywithresource58FlowSeperation.javaFlowSeperationTWR.java斷言斷言的語(yǔ)法形式為:assert<邏輯表達(dá)式>斷言語(yǔ)句由一個(gè)保留字assert和一個(gè)邏輯表達(dá)式組成。其中,邏輯表達(dá)式在斷言語(yǔ)句的位置應(yīng)該為計(jì)值真。如果為假,則拋出AssertionError類(lèi)型的異常。59求平方根方法使用斷言的版本60publicclassSquareRoot{

publicstaticvoidmain(String[]args){ doublec=-4; System.out.println(squareRoot(c)); }

staticdoublesquareRoot(doublec){ finaldoubleepsilon=1e-15; assertc>=0;//"負(fù)數(shù)不能求平方根; doubleestimate=c; while(Math.abs(estimate-c/estimate)>epsilon*estimate){ estimate=(estimate+c/estimate)/2.0; } returnestimate; }}求平方根方法使用斷言的版本這個(gè)版本的求平方根方法squareRoot在真正開(kāi)始計(jì)算參數(shù)c的平方根之前斷言c>=0。如果表達(dá)式c>=0計(jì)值為真,程序繼續(xù)執(zhí)行;若果表達(dá)式c>=0計(jì)值為假,則拋出java.lang.AssertionError類(lèi)型的異常對(duì)象。61Exceptioninthread"main"java.lang.AssertionError atSquareRoot.squareRoot(SquareRoot.java:12) atSquareRoot.main(SquareRoot.java:7)設(shè)置對(duì)斷言的支持62632019計(jì)科趙軼楠命令行參數(shù)如果使用命令進(jìn)行編譯,則可以指定java的命令行參數(shù)ea。對(duì)于本例而言,運(yùn)行時(shí)應(yīng)使用命令:

>java-ea-cp.SquareRoot如果在類(lèi)中包含斷言而在運(yùn)行時(shí)沒(méi)有指定-ea參數(shù),那么所有的斷言語(yǔ)句將被忽略。64說(shuō)明出錯(cuò)原因語(yǔ)句還可以寫(xiě)成: assertc>=0:"負(fù)數(shù)不能求平方根";即在關(guān)系表達(dá)式后面增加一個(gè)冒號(hào),然后是一個(gè)說(shuō)明出錯(cuò)原因的字符串。這樣,當(dāng)表達(dá)式計(jì)值為假,拋出的異常就能把這些字符串顯示出來(lái):65說(shuō)明出錯(cuò)原因66Exceptioninthread"main"java.lang.AssertionError:負(fù)數(shù)不能求平方根 atSquareRoot.squareRoot(SquareRoot.java

溫馨提示

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