关于 try-catch 的问题

Questions on try-catch

我正在尝试了解 try-catch 块。大多数情况下,我明白了,但有两点我不明白,也不知道应该用什么词来搜索它们。

try{
    operation1;
    operation2;
    operation3;
    operation4;
}catch(Exception e){
//exception handling here.
}

Q1:比如上面的例子。如果operation1operation2成功完成但在operation3期间抛出异常,operation1operation2会被撤销吗?还是他们会在操作后保留这些值?

Q2。如果我不知道,我的操作可能会抛出哪些异常。最好的方法是什么?据我所知,简单地抛出 Exception 不是一个好习惯。

最佳做法是不要用单个 try-catch 包围长行代码。通过这样做,您 运行 陷入了您提到的确切歧义:我的任何陈述都完成了吗?哪个抛出异常?

相反,each 语句应该有自己的 try-catch 块,如果它们每个都可以抛出异常。除非 try-catch 的结果在 catch 中被丢弃,否则您应该避免将所有操作混为一谈。

至于抛出哪些异常——你要么必须知道你在做什么(例如,当你访问数组时,如果你知道你可能会越界,你可以捕获 ArrayOutOfBoundsException).但是,在大多数情况下,您不需要在每个操作中捕获所有可能的异常。根据您的项目规模,您甚至可以只使用试错法。有 NullPointerException 吗?了解如何防止您的代码引用空对象。

1) 操作不会撤消。 2) 最佳做法是在 try catch 块中将所有可能的异常子 class 到异常 class,这样如果一开始没有特定的异常处理程序,那么异常将处理这种情况。最好为每个操作都有单独的 try catch 块,但是代码看起来会很乱。