关于 try-catch 的问题
Questions on try-catch
我正在尝试了解 try-catch 块。大多数情况下,我明白了,但有两点我不明白,也不知道应该用什么词来搜索它们。
try{
operation1;
operation2;
operation3;
operation4;
}catch(Exception e){
//exception handling here.
}
Q1:比如上面的例子。如果operation1
和operation2
成功完成但在operation3
期间抛出异常,operation1
和operation2
会被撤销吗?还是他们会在操作后保留这些值?
Q2。如果我不知道,我的操作可能会抛出哪些异常。最好的方法是什么?据我所知,简单地抛出 Exception
不是一个好习惯。
最佳做法是不要用单个 try-catch
包围长行代码。通过这样做,您 运行 陷入了您提到的确切歧义:我的任何陈述都完成了吗?哪个抛出异常?
相反,each 语句应该有自己的 try-catch
块,如果它们每个都可以抛出异常。除非 try-catch
的结果在 catch
中被丢弃,否则您应该避免将所有操作混为一谈。
至于抛出哪些异常——你要么必须知道你在做什么(例如,当你访问数组时,如果你知道你可能会越界,你可以捕获 ArrayOutOfBoundsException
).但是,在大多数情况下,您不需要在每个操作中捕获所有可能的异常。根据您的项目规模,您甚至可以只使用试错法。有 NullPointerException
吗?了解如何防止您的代码引用空对象。
1) 操作不会撤消。
2) 最佳做法是在 try catch 块中将所有可能的异常子 class 到异常 class,这样如果一开始没有特定的异常处理程序,那么异常将处理这种情况。最好为每个操作都有单独的 try catch 块,但是代码看起来会很乱。
我正在尝试了解 try-catch 块。大多数情况下,我明白了,但有两点我不明白,也不知道应该用什么词来搜索它们。
try{
operation1;
operation2;
operation3;
operation4;
}catch(Exception e){
//exception handling here.
}
Q1:比如上面的例子。如果operation1
和operation2
成功完成但在operation3
期间抛出异常,operation1
和operation2
会被撤销吗?还是他们会在操作后保留这些值?
Q2。如果我不知道,我的操作可能会抛出哪些异常。最好的方法是什么?据我所知,简单地抛出 Exception
不是一个好习惯。
最佳做法是不要用单个 try-catch
包围长行代码。通过这样做,您 运行 陷入了您提到的确切歧义:我的任何陈述都完成了吗?哪个抛出异常?
相反,each 语句应该有自己的 try-catch
块,如果它们每个都可以抛出异常。除非 try-catch
的结果在 catch
中被丢弃,否则您应该避免将所有操作混为一谈。
至于抛出哪些异常——你要么必须知道你在做什么(例如,当你访问数组时,如果你知道你可能会越界,你可以捕获 ArrayOutOfBoundsException
).但是,在大多数情况下,您不需要在每个操作中捕获所有可能的异常。根据您的项目规模,您甚至可以只使用试错法。有 NullPointerException
吗?了解如何防止您的代码引用空对象。
1) 操作不会撤消。 2) 最佳做法是在 try catch 块中将所有可能的异常子 class 到异常 class,这样如果一开始没有特定的异常处理程序,那么异常将处理这种情况。最好为每个操作都有单独的 try catch 块,但是代码看起来会很乱。