我正在导入几个字段,即每个导入一个字段的大约25行代码(在我的情况下,实际上没有其他方法)。 它位于try-catch块中,但有时候,这个字段在源代码中不存在,但我必须得到其余的。
从20起
我得到10
第11个不存在(例外)
我还需要12到20岁。
如果我不想逐一测试存在,我想知道尝试是如何工作的。如果发生异常,它不会执行其余的,对吧?什么适合我?
obs:它已超过20种,我想要一种智能且无污染的解决方案。
答案 0 :(得分:3)
是的,异常会破坏try块 - 这是处理它们的方法 如果你想继续前进,你需要为每个领域尝试/捕获。这并不意味着写20次,远离它,重构你的代码:
答案 1 :(得分:3)
如果try块中发生异常,则异常后不会执行任何操作。因此,如果在项目11上发生异常,则项目12-20将不会被执行。如果有一个finally块,执行将从第11项跳转到catch块,然后跳转到finally块。
根据您的问题所说,当字段不存在时,您会收到异常。我建议检查字段是否存在,然后执行操作。我不建议使用try catch作为检查存在条件的方法。尝试捕获应该用于错误处理,如果确实收到错误,通常不希望继续正常执行。如果你不喜欢在每一行上检查条件的想法,或者除了捕获异常之外没有其他方法来检查它,那么我建议使用try catch来创建一个帮助函数
boolean checkField(field){
try{/* do operation on field*/}
catch(Exception e){return false;}
return true;
}
void main(){
if !(checkField(field1)) return;
else if !(checkField(field2)) return;
.
.
.
}
答案 2 :(得分:1)
我仍然建议检查该字段的存在。这更清洁,更正确。
答案 3 :(得分:1)
循环中的例外情况比批次慢,而不仅仅是检查有效性。
答案 4 :(得分:0)
当try块中发生异常时,它将跳转到catch块(如果没有catch块,它将跳转到finally块,异常将冒出来。所以,代码在try块中,错误发生后将不会执行。
或者:
1)在每次尝试之前检查场的存在
2)将每个单独的字段导入包装在自己的try ... catch
我会选择1),首先防止发生异常。
如果你重构/拆分代码来检查一个字段是否存在于一个单独的可重用方法中,那真的不是那么多。