VR开发入门教程33:控制台编程--异常
来源:
6163银河.net163.am教育 发表于:
2017-07-13 09:39:19
异常实际上是程序中错误导致中断了正常的指令流的一种事件 也叫例外机制。我们以三种对代码不一样的处理方式来看一看异常的优点:没有处理
异常实际上是程序中错误导致中断了正常的指令流的一种事件.也叫例外机制。
我们以三种对代码不一样的处理方式来看一看异常的优点:
没有处理错误的程序:
read-file {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}
以常规方法处理错误
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;
观察前面的程序你会发现大部分精力花在出错处理上了.
只把能够想到的错误考虑到,对以外的情况无法处理
程序可读性差
出错返回信息量太少
用异常的形式处理错误
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;} //其它未考虑到的错误
综合上面的说法和传统的方法比较异常的优点:
1.把错误代码从常规代码中分离出来
2.把错误传播给调用堆栈
3. 按错误类型和错误差别分组
4. 系统提供了对于一些无法预测的错误的捕获和处理
5. 克服了传统方法的错误信息有限的问题
异常的使用场景
什么情况下使用例外机制?
1.当方法因为自身无法控制的原因而不能完成其任务文件不存在,网络连接无法建立……
2.处理在方法、类库、类中抛出的异常,如FileInputStream.read产生IOException
3.在大的项目中采用统一的方式处理例外时
如编写一个文字处理器
4.例外应该是不经常发生但却可能发生的故障
一定发生的事件不应该用例外机制来处理
5.例外处理用于使系统从故障中恢复
提示信息/不产生无效的结果/释放资源
注意事项:
1.不同的例外处理策略
关键性应用(处理所有例外)
实验软件(可以忽略许多例外)
2.终止程序会导致资源泄漏,利用例外处理释放资源
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");
}
}
}