推荐答案
// www.javascriptcn.com code example
try {
// 可能会抛出异常的代码
int result = 10 ~/ 0; // 这里会抛出 IntegerDivisionByZeroException
} on IntegerDivisionByZeroException catch (e) {
// 捕获特定类型的异常
print('捕获到异常: $e');
} catch (e) {
// 捕获所有其他类型的异常
print('捕获到未知异常: $e');
} finally {
// 无论是否抛出异常,都会执行的代码
print('finally 块执行');
}本题详细解读
try-catch-on-finally 的基本结构
在 Dart 中,try-catch-on-finally 是一种异常处理机制,用于捕获和处理代码中可能抛出的异常。其基本结构如下:
// www.javascriptcn.com code example
try {
// 可能会抛出异常的代码
} on ExceptionType catch (e) {
// 捕获特定类型的异常
} catch (e) {
// 捕获所有其他类型的异常
} finally {
// 无论是否抛出异常,都会执行的代码
}try 块
try 块包含可能会抛出异常的代码。如果在 try 块中的代码抛出了异常,程序会立即跳转到相应的 catch 块进行处理。
on-catch 块
on 关键字用于指定要捕获的异常类型。catch 关键字用于捕获异常对象。你可以使用 on 来捕获特定类型的异常,并使用 catch 来获取异常对象。
on IntegerDivisionByZeroException catch (e) {
print('捕获到异常: $e');
}catch 块
如果没有使用 on 指定异常类型,catch 块会捕获所有类型的异常。这个块通常用于处理未知的异常。
catch (e) {
print('捕获到未知异常: $e');
}finally 块
finally 块中的代码无论是否抛出异常都会执行。通常用于释放资源或执行清理操作。
finally {
print('finally 块执行');
}示例代码解析
在推荐答案的示例代码中:
try块中的代码int result = 10 ~/ 0;会抛出IntegerDivisionByZeroException异常。on IntegerDivisionByZeroException catch (e)捕获了这个特定类型的异常,并打印出异常信息。- 如果没有匹配的
on块,catch (e)会捕获所有其他类型的异常。 - 无论是否抛出异常,
finally块中的代码都会执行,打印出'finally 块执行'。
通过这种结构,你可以有效地处理代码中的异常,并确保资源的正确释放。