VR開(kāi)發(fā)入門(mén)教程34:控制臺(tái)編程--異常中的Try-Catch
來(lái)源:
奇酷教育 發(fā)表于:
捕捉異常捕獲并處理異常try { 接受監(jiān)視的程序塊,在此區(qū)域內(nèi)發(fā)生 的異常,由catch中指定的程序處理;} 不能有其它語(yǔ)句分隔catch(要處理
捕捉異常
捕獲并處理異常
try {
//接受監(jiān)視的程序塊,在此區(qū)域內(nèi)發(fā)生
//的異常,由catch中指定的程序處理;
}
// 不能有其它語(yǔ)句分隔
catch(要處理的異常種類(lèi)和標(biāo)識(shí)符) {
//處理異常;
}catch(要處理的異常種類(lèi)和標(biāo)識(shí)符) {
//處理異常;
}
Tty-Catch語(yǔ)句
try語(yǔ)句
捕獲例外的第一步就是用try {…}語(yǔ)句指定了一段代碼,該段代碼就是一次捕獲并處理例外的范圍。在執(zhí)行過(guò)程中,該段代碼可能會(huì)產(chǎn)生并拋棄一個(gè)或多個(gè)例外,因此,它后面的catch語(yǔ)句進(jìn)行捕獲時(shí)也要做相應(yīng)的處理。
如果沒(méi)有例外產(chǎn)生,所有的catch代碼段都被略過(guò)不執(zhí)行。
catch語(yǔ)句
每個(gè)try語(yǔ)句必須伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于捕獲try代碼塊所產(chǎn)生的例外并做相應(yīng)的處理。 catch語(yǔ)句有一個(gè)形式參數(shù),用于指明其所能捕獲得例外類(lèi)型,運(yùn)行時(shí)系統(tǒng)通過(guò)參數(shù)值把被拋棄的例外對(duì)象傳遞給catch語(yǔ)句。
程序設(shè)計(jì)中要根據(jù)具體的情況來(lái)選擇catch語(yǔ)句的例外處理類(lèi)型,一般應(yīng)該按照try代碼塊中例外可能產(chǎn)生的順序及其真正類(lèi)型進(jìn)行捕獲和處理,盡量避免選擇最一般的類(lèi)型作為catch語(yǔ)句中指定要捕獲的類(lèi)型。
當(dāng)然也可以用一個(gè)catch語(yǔ)句處理多個(gè)例外類(lèi)型,這時(shí)它的例外類(lèi)型應(yīng)該是這多個(gè)例外類(lèi)型的父類(lèi),但這種方式使得在程序中不能確切判斷例外的具體類(lèi)型。
注意事項(xiàng):
1.例外總是由距離產(chǎn)生例外最近的匹配catch代碼段處理
2.如果沒(méi)有相應(yīng)的例外處理
則例外被交給上一層try代碼段進(jìn)行處理
3.例外處理的查找依據(jù)類(lèi)型匹配原則順序進(jìn)行
第一個(gè)匹配的例外處理被執(zhí)行,當(dāng)例外處理執(zhí)行完畢,程序接著最后一個(gè)catch代碼段后的語(yǔ)句執(zhí)行
4.例外處理的順序影響到例外的處理
子類(lèi)例外可被父類(lèi)例外處理捕獲
不要先捕獲父類(lèi)例外,再捕獲子類(lèi)例外
5.如果找不到相應(yīng)的例外處理
程序?qū)⒔Y(jié)束程序執(zhí)行;
6.盡量避免用一般類(lèi)型作為catch中指定要捕獲的類(lèi)型。一般應(yīng)該按照try代碼塊中例外可能產(chǎn)生的順序及其真正類(lèi)型進(jìn)行捕獲和處理。
7.在例外處理中無(wú)法訪問(wèn)try代碼段中聲明的變量。因?yàn)榇藭r(shí)try代碼段已經(jīng)退出了,例外處理所需要的任何信息一般都應(yīng)該通過(guò)例外對(duì)象來(lái)傳遞
8.在使用方法時(shí)盡量直接處理該方法可能產(chǎn)生的例外,這樣你的程序就會(huì)更健壯
9.在catch代碼段中產(chǎn)生的例外不是由相同try的后續(xù)catch代碼段處理,而是由包含整個(gè)try-catch結(jié)構(gòu)的上層try代碼段檢測(cè)并處理
10.可以把catch到的例外對(duì)象再次拋出,使上層try-catch結(jié)構(gòu)繼續(xù)處理該例外事件;也可以把例外對(duì)象轉(zhuǎn)換為其它例外對(duì)象…
catch (Exception e) { throw e; }
11.try-catch機(jī)制不該被用于流程控制,例外情形應(yīng)該是很稀少的,而不是經(jīng)常性的
12.在catch代碼段中的return語(yǔ)句用于退出方法,而不是返回到例外拋出點(diǎn)(throw point)