版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第八章
異常處理(Exception)8.1異常分類8.2引發(fā)異常8.3聲明拋出異常8.4捕捉異常8.5定義自己的異常類型8.6構(gòu)造方法與異常處理8.7小結(jié)1try-catch-finally語句,其語法格式:try{//可能發(fā)生異常的代碼
}catch(異常類型1變量){//<異常類型1>異常的處理代碼}catch(異常類型2變量){//<異常類型2>異常的處理代碼}.....finally{//總是要執(zhí)行的代碼
}產(chǎn)生異常語句throw拋出異常異常類結(jié)構(gòu)異常的方法finally機(jī)制2異常(例外)是方法代碼運(yùn)行時出現(xiàn)的非正常狀態(tài),這種非正常狀態(tài)使程序無法或不能再正常地繼續(xù)往下運(yùn)行。常見的異常:數(shù)組下標(biāo)越界除數(shù)為零內(nèi)存溢出文件找不到等。3異常對象記錄著這個異常的一些描述和狀態(tài)信息。方法運(yùn)行失敗時,記錄這個異常信息的異常對象將產(chǎn)生(或稱為引發(fā),拋出,throw),它有兩種引發(fā)方式:1系統(tǒng)自動引發(fā)2在程序中由throw語句引發(fā)異常對象引發(fā)后,系統(tǒng)根據(jù)異常對象的類型,首先在當(dāng)前方法尋找相應(yīng)的異常處理代碼,找到后就將控制流轉(zhuǎn)入該異常處理代碼并向其傳遞異常對象(稱為捕獲該異常,catch),異常處理代碼可以根據(jù)接受到的異常對象進(jìn)行相應(yīng)的處理;5尋找相應(yīng)的異常處理代碼的過程:當(dāng)前方法直接或間接調(diào)用者找到,傳遞異常對象并進(jìn)行異常處理沒有找到,調(diào)用默認(rèn)的異常處理程序,中止當(dāng)前線程
6舉例(沒有異常處理的情況)1)classExceptionDivideBy0{2)staticvoidmethod(){intx=0,z=10;
int
y=10/x;
System.out.println("z="+z);}publicstaticvoidmain(String[]args){method();
System.out.println("After
method.");}11)}7具有異常處理的情況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.");}}9ArithmeticExceptionAftertry/catchblocks.Aftermethod.10每個異常由類Throwable或者它的一個子類的實(shí)例表示,這樣的對象可被拋出并能被傳遞給合適的異常處理代碼處理。Throwable類及其子類統(tǒng)稱為異常類,每個異常類表示一種異常類型。Throwable類是Object類的直接子類,其本身又有兩個直接子類:Error與Exception類。RuntimeException類是Exception類的直接子類,如圖8-1所示。這里,Error類、RuntimeException類和Exception類分別代表某一類異常類型:8.1異常分類11(1)Error類及其子類:表示災(zāi)難性的、普通程序很難恢復(fù)的異常,例如:●NoClassDefFoundError(類定義沒找到異常):JVM無法找到相應(yīng)的class文件。●OutOfMemoryError(內(nèi)存越界異常):JVM沒有足夠的存儲空間滿足對象創(chuàng)建的要求。●NoSuchMethodError(調(diào)用不存在的方法異常):在改變某個方法的簽名后,原先要調(diào)用該方法的應(yīng)用程序,在運(yùn)行時就會拋出該異常。一般情況下,程序員可不必理會這類異常,它們雖然很嚴(yán)重,但很少發(fā)生。13(2)RuntimeException類及其子類:表示設(shè)計或?qū)崿F(xiàn)方面的問題,例如:●ArithmeticException(算術(shù)運(yùn)算異常):算術(shù)運(yùn)算時發(fā)生的異常情況,如整數(shù)相除,除數(shù)為零。●ClassCastException(強(qiáng)制類型轉(zhuǎn)換異常):把一個對象引用轉(zhuǎn)換成一個不合適的類型,如把一個對象引用轉(zhuǎn)換成某個子類類型?!馧ullPointerException(空引用異常):需要對象引用時使用了一個null引用?!馎rrayIndexOutOfBoundsException(數(shù)組下標(biāo)越界異常):下標(biāo)值超出了數(shù)組大小?!馧umberFormatException(數(shù)字格式異常):試圖將非數(shù)字格式字符串轉(zhuǎn)換成數(shù)值。14(3)Exception類及其非RuntimeException子類:表示運(yùn)行時因環(huán)境的影響而引發(fā)的異常,例如:●IOException(輸入輸出異常):在I/O操作失敗或者被中斷時引發(fā)。其子類包括:EOFException、、InterruptedIOException等?!馡nterruptedException(中斷異常):當(dāng)前等待或睡眠線程被其他線程中斷時引發(fā)。這類異常并非因設(shè)計或?qū)崿F(xiàn)引起,是無法避免的。但一般情況下,程序員應(yīng)該提供相應(yīng)的代碼捕捉和處理。15受檢查的異常和不受檢查的異常:不受檢查的異常:類Error和類RuntimeException及其子類屬于不受檢查的異常,如圖8-1所示。不受檢查的異常不受編譯系統(tǒng)的檢查。對這類異常,程序員可以捕捉或聲明拋出,但通??梢圆患永頃?。17異常類的方法和屬性
(1)異常類的構(gòu)造方法publicException()創(chuàng)建新異常。publicException(Stringmessage)用字符串參數(shù)message描述異常信息創(chuàng)建新異常。(2)異常類的方法publicStringtoString()返回描述當(dāng)前異常對象信息的字符串。publicStringgetMessage()返回描述當(dāng)前異常對象的詳細(xì)信息。publicvoidprintStackTrace()在屏幕上輸出當(dāng)前異常對象使用堆棧的軌跡,即程序中先后調(diào)用了哪些方法,使得運(yùn)行過程中產(chǎn)生了這個異常對象。18所謂異常的引發(fā)是指因程序運(yùn)行出現(xiàn)異常情況而產(chǎn)生異常對象、進(jìn)而轉(zhuǎn)入異常處理過程的情形。Java運(yùn)行系統(tǒng)在發(fā)現(xiàn)異常情況時會自動引發(fā)異常。自動引發(fā)異常如下例:8.2引發(fā)異常19throw引發(fā)異常異常既可以在發(fā)生異常情況時由運(yùn)行系統(tǒng)引發(fā),也可以在程序中用throw語句顯式引發(fā)。格式如下:
thrownewArithmeticException();21【例8-2】下面程序在被減數(shù)a小于減數(shù)b時將引發(fā)ArithmeticException異常。1)classTest{2)staticintmethod(inta,intb){3)if(a<b)4)thrownewArithmeticException("a<b");//產(chǎn)生異常5)returna-b;6)}7)publicstaticvoidmain(String[]args){8)method(3,5);9)}10)}下面是該程序的輸出結(jié)果:Exceptioninthread"main"java.lang.ArithmeticException:a<batTest.method(Test.java:4)atTest.main(Test.java:8)22如果一個方法引發(fā)的是受檢查的異常且自己沒有捕捉,那么它必須用throws子句聲明拋出;該方法的調(diào)用者如果不對異常進(jìn)行捕捉,那么也必須用throws子句聲明拋出。下面是包含throws子句的方法定義的語法格式:
<返回類型><方法名>(<參數(shù)列表>)throws<異常類型列表>{...}8.3聲明拋出異常23對不受檢查的異常,同樣可以聲明拋出(或進(jìn)行捕捉),這在語法上是允許的。無論是受檢查的異常還是不受檢查的異常,對不受檢查的異常,不管是否聲明了異常拋出,異常一旦引發(fā),其處理過程是一致的,即:異常沿著方法調(diào)用的反方向傳播,尋找并轉(zhuǎn)入合適的異常處理代碼執(zhí)行。如果方法及其所有的調(diào)用者都沒有提供合適的處理代碼,那么異常將最終傳播到運(yùn)行系統(tǒng),運(yùn)行系統(tǒng)調(diào)用默認(rèn)的異常處理代碼后終止程序執(zhí)行。圖8-2說明了例8-2和例8-3中異常引發(fā)和傳遞的過程。25圖8-2異常傳播過程示意圖26請問下面哪些BaseClass類的子類定義是合法的?A)classAextendsBaseClass{voidmethod()throwsIOException{}}B)classBextendsBaseClass{voidmethod()throwsException{}}C)classCextendsBaseClass{
voidmethod()throwsEOFException,{}}29D)classDextendsBaseClass{voidmethod()throwsIOException,InterruptedException{}}E)classEextendsBaseClass{voidmethod(){}}F)classFextendsBaseClass{voidmethod()throwsIOException,NullPointerException{}}30【例2.10】從鍵盤輸入一個整數(shù)和實(shí)數(shù),并輸出它們的和
importjava.io.*;//引入java.io包c(diǎn)lassInputDemo{publicstaticvoidmain(Stringargs[])throwsIOException{//用標(biāo)準(zhǔn)輸入System.in創(chuàng)建一個BufferedReaderBufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
System.out.print("請輸入一個整數(shù):");Stringstr=br.readLine();//輸入字符行存入字符串inti=Integer.parseInt(str);//轉(zhuǎn)換字符串為整型數(shù)據(jù)31System.out.print("請輸入一個實(shí)數(shù):");str=br.readLine();floatf=Float.parseFloat(str);System.out.print("它們的和是:"+(i+f));}}32如果不加以捕捉,引發(fā)的異常將沿著方法調(diào)用的反方向往外拋出和傳播,直至Java運(yùn)行系統(tǒng)。通常,這并不是所希望的結(jié)果。一般來說,引發(fā)異常的方法的調(diào)用者應(yīng)該捕捉,并根據(jù)具體情況處理異常,從而阻止異常繼續(xù)往外傳播。Java使用try-catch-finally語句來捕捉和處理可能發(fā)生的異常,該語句的語法格式如下:8.4捕捉異常33try{//此處是可能發(fā)生異常的代碼}catch(<異常類型1><異常引用變量>){//<異常類型1>異常的處理代碼}catch(<異常類型2><異常引用變量>){//<異常類型2>異常的處理代碼}…finally{//總是要執(zhí)行的代碼}該語句包含try、catch和finally三個子句。其中,catch子句可以有多個,而且至少有一個catch子句或finally子句。34try子句包含一段可能要發(fā)生異常的代碼。一旦發(fā)生異常,將由后面的catch子句捕捉處理。每個catch子句有一個參數(shù),參數(shù)類型指明該子句能夠捕捉的異常類型。如果子句指定的參數(shù)類型是所發(fā)生的異常的類或者是其超類,則說明catch子句能夠捕捉該異常。此時,運(yùn)行系統(tǒng)將把異常對象的引用值傳遞給catch子句的參數(shù)變量,并將控制流轉(zhuǎn)移到該catch子句,執(zhí)行子句內(nèi)的異常處理代碼。之后,接著執(zhí)行try語句后面的代碼。如果try子句內(nèi)的代碼沒有發(fā)生任何異常,那么跳過catch子句,直接執(zhí)行try語句后面的代碼。8.4.1try和catch子句35classDemo{publicstaticvoidmain(String[]args){try{inta=args.length;System.out.println("a="+a);intb=42/a;int[]c={1};c[4]=99;}catch(ArithmeticExceptione)//捕獲算術(shù)運(yùn)算異常{System.out.println("Divideby0:"+e);}
catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Arrayindexoob:"+e);}System.out.println("Aftertry/catchblocks.");}}【例8-5】try和catch子句舉例36a=0Divideby0:java.lang.ArithmeticException:/byzeroAftertry/catchblocks.37最后說明兩點(diǎn):(1)當(dāng)發(fā)生異常時,如果有catch捕捉到了異常,那么不管具體的異常處理代碼如何(甚至不含任何語句),Java運(yùn)行系統(tǒng)都認(rèn)為該異常已被消除;(2)當(dāng)執(zhí)行完異常處理代碼后,控制流并不會回到異常發(fā)生處,而是執(zhí)行try語句后面的代碼(如果沒有finally子句)。38try子句內(nèi)的代碼可能會發(fā)生多種類型的異常,而try語句也允許有多個catch子句,每個catch子句可以捕捉一種類型(包括子類型)的異常。當(dāng)然,每次執(zhí)行try語句時,至多只能拋出一個異常,相應(yīng)地,至多只能有一個異常處理代碼被執(zhí)行。
8.4.2多個catch子句39當(dāng)異常發(fā)生時,運(yùn)行系統(tǒng)將按先后次序依次判斷各catch子句,如果發(fā)現(xiàn)某個catch子句能夠捕捉該異常,就執(zhí)行其中的處理代碼,而其后面的catch子句將被忽略。注意:處理子類型異常的catch子句一定要放在處理超類型異常的catch子句之前。如果將一個處理超類型異常的catch子句放在處理子類型異常的catch子句之前,或者兩個catch子句捕捉同一類型的異常,編譯系統(tǒng)都將給出錯誤信息。40publicclassTest2{publicstaticvoidmain(String[]args){intx=0;inty;try{y=100/x;}catch(Exceptionex){ex.printStackTrace();}catch(ArithmeticExceptionex){ex.printStackTrace();}}}(ArithmeticExceptionex)(Exceptionex)Test2.java:9:已捕捉到異常java.lang.ArithmeticExceptioncatch(ArithmeticExceptionex)^1錯誤編譯不通過:41使用finally子句的好處是:控制流不管以何種原因離開try語句,都要先執(zhí)行finally子句。所以,可以將那些無論是否發(fā)生異常、異常無論是否被捕捉都需要執(zhí)行的代碼放置在finally子句內(nèi)。8.4.3finally子句42控制流離開try語句的情況可分為以下幾種:●try子句代碼正常執(zhí)行,沒有引發(fā)異常;●try子句代碼執(zhí)行時引發(fā)異常,但被catch子句捕捉處理;●try子句代碼執(zhí)行時引發(fā)異常,但沒有catch子句能捕捉處理;●try子句代碼執(zhí)行時引發(fā)異常,且被catch子句捕捉,但在執(zhí)行異常處理代碼時發(fā)生新的異常。注意:因return、break或continue等跳轉(zhuǎn)語句(不管是出現(xiàn)在try子句中,還是出現(xiàn)在catch子句中)要離開try語句時,同樣需要先執(zhí)行finally子句。431)classFinallyDemo{2)staticvoidm1(inti){3)try{4)if(i==2){5)System.out.println("第2種情況:發(fā)生算術(shù)運(yùn)算異常");6)thrownewArithmeticException();7)}if(i==3){8)System.out.println("第3種情況:發(fā)生數(shù)字格式異常");9)thrownewNumberFormatException();10)}if(i==4){11)System.out.println("第4種情況:發(fā)生數(shù)組下標(biāo)越界異常");12)thrownewArrayIndexOutOfBoundsException();13)}14)System.out.println("第1種情況:沒有發(fā)生異常");15)}【例8-9】finally子句舉例4415)catch(ArithmeticExceptione)16){System.out.println("異常被捕捉處理");}17)catch(ArrayIndexOutOfBoundsExceptione)18){System.out.println("異常被捕捉,但又被重新引發(fā)");19)throwe;}20)finally21){
System.out.println("這是finally子句");
}23)System.out.println("這是try語句后的代碼");24)}25)publicstaticvoidmain(Stringargs[])26){for(inti=1;i<5;i++)27){try28){m1(i);}29)catch(RuntimeExceptione)30){System.out.println("由main方法捕捉到異常");}
}
}}45下面是程序的輸出結(jié)果:第1種情況:沒有發(fā)生異常這是finally子句這是try語句后的代碼第2種情況:發(fā)生算術(shù)運(yùn)算異常異常被捕捉處理這是finally子句這是try語句后的代碼46下面是程序的輸出結(jié)果(續(xù)):第3種情況:發(fā)生數(shù)字格式異常這是finally子句由main方法捕捉到異常第4種情況:發(fā)生數(shù)組下標(biāo)越界異常異常被捕捉,但又被重新引發(fā)這是finally子句由main方法捕捉到異常47當(dāng)try子句發(fā)生異常時,如果沒有一個catch子句能夠捕捉到,則異常從該try語句拋出并向外傳播。如果try語句本身是另外一個try語句的try子句的一部分,那么異常就由該外層try語句的catch子句捕捉處理。如果沒有外層的try語句,或者外層try語句也沒有catch子句能夠捕捉該異常,則異常被傳播到方法的調(diào)用者那里,由調(diào)用方法處理。8.4.4未捕捉到的異常481)classTest{//例8-7未捕捉到的異常被傳播并由調(diào)用方法捕捉。2)staticvoidm1(Strings){3)try4){intx=Integer.parseInt(s);5)inty=10/x;}6)catch(NumberFormatExceptione)7){System.out.println("caught"+e+"inm1");}8)System.out.println("exitingfromm1");9)}10)publicstaticvoidmain(Stringargs[]){11)try12){m1(args[0]);}13)catch(ArrayIndexOutOfBoundsExceptione)14){System.out.println("caught"+e+"inmain");}15)catch(ArithmeticExceptione)16){System.out.println("caught"+e+"inmain");}17)System.out.println("exitingfrommain");18)}}49該程序可以在不同情況下發(fā)生3種不同類型的異常。如果命令行不提供參數(shù),下面是程序的輸出結(jié)果:C:\\>javaTestcaughtjava.lang.ArrayIndexOutOfBoundsException:0inmainexitingfrommain如果命令行的第1個參數(shù)為非數(shù)字格式字符串,下面是程序的輸出結(jié)果:C:\\>javaTestaaacaughtjava.lang.NumberFormatException:aaainm1exitingfromm1exitingfrommain如果命令行的第一個參數(shù)為數(shù)字0,下面是程序的輸出結(jié)果:C:\\>javaTest0caughtjava.lang.ArithmeticException:/byzeroinmainexitingfrommain50try子句發(fā)生的異??梢杂烧Z句中的某個catch子句捕捉處理,但在執(zhí)行catch子句內(nèi)的異常處理代碼時也可能再引發(fā)新的異常。此時,原先的異常被遺棄,新的異常從try語句拋出并向外傳播。與"未捕捉到的異常"類似,該新異?;蛘哂赏鈱觮ry語句的catch子句捕捉,或者由方法的調(diào)用者處理。8.4.5再引發(fā)異常511)importjava.io.IOException;//【例8-8】再引發(fā)異常舉例2)classTest{3)staticvoidm1()throwsIOException{4)try5){thrownewRuntimeException("demo_1");}6)catch(RuntimeExceptione)7){System.out.println("caught"+e+"inm1");8)thrownewIOException("demo_2");}9)}10)publicstaticvoidmain(Stringargs[]){11)try12){m1();}13)catch(IOExceptione)14){System.out.println("caught"+e+"inmain");}15)System.out.println("exitingfrommain");16)}17)}52下面是程序的輸出結(jié)果:caughtjava.lang.RuntimeException:demo_1inm1caughtjava.io.IOException:demo_2inmainexitingfrommain53
8.5定義自己的異常類型
自定義的異常類型必須是Throwable類的子類。只有Throwable類及其子類的實(shí)例才能夠被引發(fā)和捕捉。
通常將自定義異常類型定義成Exception的子類,以產(chǎn)生受檢查的異常。
Java異常處理機(jī)制的特點(diǎn)是方法的調(diào)用者必須認(rèn)識和處理方法可能會拋出的受檢查異常,而對不受檢查的異常,調(diào)用者則可以不加理會。54例:在定義銀行類時,若取錢數(shù)大于余額則作為異常處理(InsufficientFundsException)。思路:
產(chǎn)生異常的條件是余額少于取額,因此是否拋出異常要先判斷該條件。確定產(chǎn)生異常的方法,應(yīng)該在取錢方法withdrawal中產(chǎn)生異常InsufficientFundsException
。
處理異常安排在調(diào)用withdrawal的時候,因此withdrawal方法要聲明異常,由上級方法捕獲并處理。要定義好自己的異異常。55publicclassInsufficientFundsExceptionextendsException{privateBankexcepbank;privatedoubleexcepAmount;
InsufficientFundsException(Bankba,doubledAmount){excepbank=ba;excepAmount=dAmount;}publicStringtoString(){Stringstr="Thebalance"+excepbank.getbalance()+"Thewithdrawalwas"+excepAmount;returnstr;}}56classBank{doublebalance;//余額
publicvoiddeposite(doubledAmount)//存錢
{if(dAmount>0.0)balance=balance+dAmount;}publicvoidwithdrawal(doubledAmount)throwsInsufficientFundsException{//取錢if(balance<dAmout){
thrownewInsufficientFundsException(this,dAmount);}balance=balance-dAmount;}publicdoublegetbalance()//獲取余額
{returnbalance;}}57publicclassExceptionDemo{publicstaticvoidmain(Stringargs[]){try{Bankba=newBank();ba.deposite(50);
ba.withdrawal(100);System.out.println("Withdrawalsuccessful!");}catch(Exceptione){System.out.println(e.toString());}}}58【例】設(shè)計自己的異常。從鍵盤輸入一個double類型的數(shù),若不小于0.0,則輸出它的平方根,若小于0.0,則輸出提示信息"輸入錯誤!"。
importjava.io.*;classMyExceptionextendsException{ doublex; MyException(doublex) {this.x=x;}publicStringtoString(){return"輸入錯誤:x<0.0"+"x="+x;}}59publicclassMySqrt{staticvoidtest(doublex)throwsMyException{if(x<0.0)thrownewMyException(x);elseSystem.out.println(Math.sqrt(x));}publicstaticvoidmain(Stringargs[])throwsIOException{try
{System.out.print("求輸入實(shí)數(shù)的平方根,請輸入一個實(shí)數(shù):");BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));Strings=br.readLine();
test(Double.parseDouble(s));
}catch(MyExceptionClasse){System.out.println(e.toString());}
}}60與普通方法一樣,構(gòu)造方法也可以引發(fā)異常、捕捉異常或者聲明拋出異常。實(shí)際上,構(gòu)造方法有時比普通方法更需要使用異常處理機(jī)制。對于普通方法,有時可以通過返回一個特殊值來表示其執(zhí)行出現(xiàn)了異常。例如,一個方法的返回類型是一種引用類型,且在正常情況下它總是能返回一個對象的引用,那么就可以返回一個null值表示非正常情況,而不是拋出異常。這種處理方式不適用于構(gòu)造方法。構(gòu)造方法沒有返回類型,構(gòu)造方法體不能使用帶表達(dá)式的return語句。下面是構(gòu)造方法
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)步行街景觀路燈施工合同
- 瑜伽教練保姆合同模板
- 職業(yè)體驗(yàn)?zāi)攴b租賃合同模板
- 城市防噪系統(tǒng)防水涂料施工合同
- 婚慶用品租賃合同范本
- 高爐建設(shè)投資分析合同
- 鄭州二手房買賣合同風(fēng)險防范
- 外語培訓(xùn)機(jī)構(gòu)教師合同
- 住宅建筑地暖安裝合同樣本
- 團(tuán)課教練合同
- 6.4 住房方面?zhèn)€別要求的處理(游客個別要求處理)《導(dǎo)游業(yè)務(wù)》教學(xué)課件
- 部編人教版五年級上冊語文 期末復(fù)習(xí)專題訓(xùn)練5 詞語運(yùn)用
- 2023學(xué)年完整公開課版法布爾簡介
- 鐵路事故分析
- 物業(yè)公司水電工管理制度
- 管道安全檢查表
- 昌樂縣鎮(zhèn)區(qū)基準(zhǔn)地價更新修正體系匯編(完整版)資料
- 2023年中考語文褒義詞專題練習(xí)(含答案)
- 應(yīng)急救援預(yù)案演練效果評價
- 微生物原生質(zhì)體融合育種課件
- 景觀園林綠化施工設(shè)計及養(yǎng)護(hù)
評論
0/150
提交評論