三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
2012-10-28 02:12
239 查看
好的编程习惯 要求 你 能够 事先 估计 程序可能发生的错误。你 可以检查 可能导致程序非正常终止的条件,并且 把 这些情况 处理好;你 也可以 记录下 错误信息,优雅地 终止 程序 或者 采取 正确的措施。在先前的博文中,我们 已经看到 如何检查 一项措施 是否适用于 一个物件。在避免 错误的情况下,这样的检查
可以防止 对 物件 采取 不适当的措施。当你 试图 对 一个物件 采取 不适当的措施时,你的程序 就会陷入 意外情况。在下面这个程序当中,我 对 Fraction类型的物件myFraction 采取了 noSuchMethod这项措施,而 noSuchMethod这项措施 是 不适用于 Fraction类型的物件的:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-367.jpg)
当你 编译 这段程序时,编译器 会向 你 发出 错误警告。虽然 这样,你 还是可以 运行 这个程序。当你 运行 这个程序时,你 会看见 你的程序 非正常地 终止,并且 看到 类似于下面这样的错误信息:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-368.jpg)
为了 避免 程序 像 这样 非正常地 终止,我们 可以使用 这样的格式:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-369.jpg)
@try中的代码 会 正常 执行。如果 @try中的代码 遭遇到 意外情况,程序 不会终止,而是 继续执行 @catch中的语句。无论 @try中的语句 是否 遭遇到 意外情况,@finally当中的语句 都会 正常 执行。下面的程序 解释了 如何使用 @try命令:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-370.jpg)
运行 这个程序,可以得到 这样的结果:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-371.jpg)
当意外情况 发生的时候,@catch这段代码 就会执行,用来捕捉 意外情况。我 用 NSExcepiton类型的物件exception物件 来代表 @try这段代码所遇到的意外情况,并且 对 exception这个物件 采取了 name 和 reason这两项措施,从而 将 意外情况的名称 和 原因 读取出来。而 @finally当中的语句 则 可以验证 程序 是否终止。
可以防止 对 物件 采取 不适当的措施。当你 试图 对 一个物件 采取 不适当的措施时,你的程序 就会陷入 意外情况。在下面这个程序当中,我 对 Fraction类型的物件myFraction 采取了 noSuchMethod这项措施,而 noSuchMethod这项措施 是 不适用于 Fraction类型的物件的:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-367.jpg)
当你 编译 这段程序时,编译器 会向 你 发出 错误警告。虽然 这样,你 还是可以 运行 这个程序。当你 运行 这个程序时,你 会看见 你的程序 非正常地 终止,并且 看到 类似于下面这样的错误信息:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-368.jpg)
为了 避免 程序 像 这样 非正常地 终止,我们 可以使用 这样的格式:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-369.jpg)
@try中的代码 会 正常 执行。如果 @try中的代码 遭遇到 意外情况,程序 不会终止,而是 继续执行 @catch中的语句。无论 @try中的语句 是否 遭遇到 意外情况,@finally当中的语句 都会 正常 执行。下面的程序 解释了 如何使用 @try命令:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-370.jpg)
运行 这个程序,可以得到 这样的结果:
![](http://www.tongwenguan.com/wp-content/uploads/2012/02/ishot-371.jpg)
当意外情况 发生的时候,@catch这段代码 就会执行,用来捕捉 意外情况。我 用 NSExcepiton类型的物件exception物件 来代表 @try这段代码所遇到的意外情况,并且 对 exception这个物件 采取了 name 和 reason这两项措施,从而 将 意外情况的名称 和 原因 读取出来。而 @finally当中的语句 则 可以验证 程序 是否终止。
相关文章推荐
- 二十九、多态性、动态类型 和 动态绑定(二)动态绑定 和 id类型
- 三十、多态性、动态类型 和 动态绑定(三)运行时 VS 编译时
- 三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
- 三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
- 三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- IOS开发中的多态性、动态类型和动态绑定
- Obj-C的多态性、动态类型和动态绑定
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- Obj-C的多态性、动态类型和动态绑定
- 二十八、多态性、动态类型 和 动态绑定(一)多态性:不同的措施 共用 同一个名称
- 如何理解C++的多态性和类型动态绑定?
- C++静态类型、动态类型与多态性探讨
- Python成长之路(四)——循环设计、循环对象、函数对象、错误处理、动态类型
- 静态类型和动态类型 静态绑定和动态绑定
- 解析Objective-C中多态、动态类型和动态绑定
- 动态处理的类型(一): 压缩与限幅
- Objective-C之成魔之路【11-多态性、动态类型和动态绑定】
- 在不对控件类型进行硬编码的情况下在 Visual C# .NET 中动态添加控件
- linq to xml/动态类型 从树型表构建树(linq to entity处理数据库)