VR開發(fā)入門教程33:控制臺編程--異常
來源:
奇酷教育 發(fā)表于:
2017-07-13 09:39:19
異常實際上是程序中錯誤導(dǎo)致中斷了正常的指令流的一種事件 也叫例外機制。我們以三種對代碼不一樣的處理方式來看一看異常的優(yōu)點:沒有處理
異常實際上是程序中錯誤導(dǎo)致中斷了正常的指令流的一種事件.也叫例外機制。
我們以三種對代碼不一樣的處理方式來看一看異常的優(yōu)點:
沒有處理錯誤的程序:
read-file {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}
以常規(guī)方法處理錯誤
openFiles;
if (theFilesOpen) {
determine the lenth of the file;
if (gotTheFileLength){
allocate that much memory;
if (gotEnoughMemory) {
read the file into memory;
if (readFailed) errorCode=-1;
else errorCode=1;
}else errorCode=-3;
}else errorCode=-5 ;
}else errorCode=-5;
觀察前面的程序你會發(fā)現(xiàn)大部分精力花在出錯處理上了.
只把能夠想到的錯誤考慮到,對以外的情況無法處理
程序可讀性差
出錯返回信息量太少
用異常的形式處理錯誤
read-File;
{ try {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}catch(fileopenFailed) { dosomething; }
catch(sizeDetermineFailed) {dosomething;}
catch(memoryAllocateFailed){ dosomething;}
catch(readFailed){ dosomething;}
catch(fileCloseFailed) { dosomething; }
catch(Exception) {dosomething;} //其它未考慮到的錯誤
綜合上面的說法和傳統(tǒng)的方法比較異常的優(yōu)點:
1.把錯誤代碼從常規(guī)代碼中分離出來
2.把錯誤傳播給調(diào)用堆棧
3. 按錯誤類型和錯誤差別分組
4. 系統(tǒng)提供了對于一些無法預(yù)測的錯誤的捕獲和處理
5. 克服了傳統(tǒng)方法的錯誤信息有限的問題
異常的使用場景
什么情況下使用例外機制?
1.當(dāng)方法因為自身無法控制的原因而不能完成其任務(wù)文件不存在,網(wǎng)絡(luò)連接無法建立……
2.處理在方法、類庫、類中拋出的異常,如FileInputStream.read產(chǎn)生IOException
3.在大的項目中采用統(tǒng)一的方式處理例外時
如編寫一個文字處理器
4.例外應(yīng)該是不經(jīng)常發(fā)生但卻可能發(fā)生的故障
一定發(fā)生的事件不應(yīng)該用例外機制來處理
5.例外處理用于使系統(tǒng)從故障中恢復(fù)
提示信息/不產(chǎn)生無效的結(jié)果/釋放資源
注意事項:
1.不同的例外處理策略
關(guān)鍵性應(yīng)用(處理所有例外)
實驗軟件(可以忽略許多例外)
2.終止程序會導(dǎo)致資源泄漏,利用例外處理釋放資源
3.盡可能近地處理例外,這樣程序清晰易讀
4.能在局部處理的錯誤不要使用例外機制,例外機制的處理比正常處理效率低。
示例:
using System;
class ExcepTest
{
public static void Main(String[] args)
{
int b=0;
int a;
try {
a=5/b;
}
catch(ArithmeticException e)
{
Console.WriteLine("divided by 0");
}
}
}