学习 Adobe Flash 中的 ActionScript 2.0 |
|
|
|
| 语法和语言基础知识 > 关于语句 > 关于条件语句 > 使用 try..catch 和 try..catch..finally 语句 | |||
使用 try..catch..finally 代码块使您能够在 Flash 应用程序中加入错误处理。try..catch..finally 关键字允许您括起一个可能会发生错误的代码块,并对该错误作出响应。如果 try 代码块内的任何代码抛出了一个错误(使用 throw 语句),控制将传递给 catch 代码块(如果有)。然后,控制将传递给 finally 代码块(如果有)。无论是否有错误被抛出,可选的 finally 代码块都会执行。
如果 try 代码块内的代码未抛出错误(也就是说,try 代码块正常完成),则仍会执行 finally 代码块内的代码。
|
注意 |
即使 try 代码块使用 return 语句退出,finally 代码块仍会执行。 |
应使用以下格式编写 try..catch 和 try..catch..finally 语句:
// try-catch
try {
// 语句
} catch (myError) {
// 语句
}
// try-catch-finally
try {
// 语句
} catch (myError) {
// 语句
} finally {
// 语句
}
无论何时代码抛出一个错误,您都可以编写自定义处理函数来适当地处理错误并执行相应的动作。您可能需要尝试从 Web 服务或文本文件加载外部数据,或向最终用户显示一条错误消息。还可以使用 catch 代码块尝试连接到可以提醒管理员出现了特定错误的 Web 服务,以便他/她可以确保应用程序正常工作。
在对一些数字执行除法运算之前使用 try..catch..finally 代码块进行数据验证:
var n1:Number = 7;
var n2:Number = 0;
try {
if (n2 == 0) {
throw new Error("Unable to divide by zero");
}
trace(n1/n2);
} catch (err:Error) {
trace("ERROR! " + err.toString());
} finally {
delete n1;
delete n2;
}
Unable to divide by zero。var n2:Number = 0;
更改为:
var n2:Number = 2;
如果 n2 的值等于 0,则将抛出一个错误,catch 代码块将捕获该错误,该错误会在"输出"面板中显示一条消息。如果 y 的值不等于 0,则"输出"面板中将显示 n1 除以 n2 的结果。无论是否出现错误,finally 代码块都会执行,并会从 Flash 文档中删除变量 n1 和 n2 的值。
在错误发生时,除了可以抛出 Error 类的新实例外,您还可以扩展 Error 类来创建您自己的自定义错误,如下例所示。
创建自定义错误:
// 在 DivideByZeroException.as 中:
class DivideByZeroException extends Error {
var message:String = "Divide By Zero error";
}
var n1:Number = 7;
var n2:Number = 0;
try {
if (n2 == 0) {
throw new DivideByZeroException();
} else if (n2 < 0) {
throw new Error("n2 cannot be less than zero");
} else {
trace(n1/n2);
}
} catch (err:DivideByZeroException) {
trace(err.toString());
} catch (err:Error) {
trace("An unknown error occurred; " + err.toString());
}
因为 n2 的值等于 0,Flash 抛出您的自定义 DivideByZeroException 错误类,并会在"输出"面板中显示 Divide By Zero error。如果在第二行中将 n2 的值从 0 更改为 -1,然后再次测试该 Flash 文档,您将看到"输出"面板中显示 An unknown error occurred; n2 cannot be less than zero。将 n2 的值设置为任何大于 0 的数字便可使"输出"面板中显示除法的结果。有关创建自定义类的详细信息,请参阅"类"。
|
|
|
|