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