我想继续生成错误的下一行
try{
statement A;
statement B;
statement C;
}
catch(NullPointerException NPE){.....}
现在假设我的语句A抛出异常,所以我想跳过它并继续使用B.不要给我的建议放入catch / finally块或任何其他解决方案。我只想知道这可能跳过并继续下一个声明?
答案 0 :(得分:9)
是的,没有finally
阻止就可以了。
try{
statement A;
}
catch(NullPointerException NPE){.....}
try{
statement B;
}
catch(NullPointerException NPE){.....}
try{
statement C;
}
catch(NullPointerException NPE){.....}
另一方面,我并不认为这很好。如果您设法达到需要这种流量控制的程度,您需要退后一步并重新考虑代码设计。
答案 1 :(得分:1)
如果A抛出异常,则无法执行语句B.一种方法是单独尝试/捕获块,其他方式是将其他行放入finally块。
答案 2 :(得分:1)
如果您的陈述相似且可以参数化,请使用循环:
for (int i = 0; i < statementCount; i++) {
try {
/** do what you need */
} catch(Exception e) {
}
}
如果需要更多参数,请将其放在单独的方法中:
public static void main(String[] args) {
for (int i = 0; i < statementCount; i++) {
}
execute(params);
}
public void execute(Object... objects) {
try {
doSomthing(objects[0], objects[1]);
} catch(Exception e) {
}
}
如果语句完全不同,Java 8提供了有趣的解决方案:method references and lambdas。所以你可以用这样的东西玩arround:
public static void main(String[] args) {
execute(someObject, YourClass::method);
}
public void execute(Object param, Function<Object, Void> function) {
try {
function.apply(param);
} catch(Exception e) {
}
}
答案 3 :(得分:-1)
就像darijan已经提到的那样,你可以将每一个语句都放入自己的try-catch中。或者,如果您知道可能导致异常的原因,您只需检查它是否可以执行您的陈述
try{
if(parameterForStatementA != null) {
statementA;
}
if(parameterForStatementB != null) {
statementB;
}
if(parameterForStatementC != null) {
statementC;
}
} catch(Exception e) {
// something unexpected happened
}
验证参数通常比捕获抛出的异常更有效