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