2013-06-21 3 views
1

я хочу продолжить со следующей строки, из которого генерируется ошибка,Продолжить со следующей строки после получения исключения

try{ 
    statement A; 
    statement B; 
    statement C; 
} 
catch(NullPointerException NPE){.....} 

Теперь предположим, что мое суждение А бросает исключение, поэтому я хочу, чтобы пропустить и продолжить с B. Не предлагайте моему предложению включить блокировку catch/finally или любое другое решение. Я просто хочу знать, возможно ли это до и продолжить со следующего оператора?

+1

Нет, вам нужно поймать исключение для каждого оператора в отдельности, то. Закройте каждый оператор в блоке try-catch, который, я думаю, будет выглядеть хромым. – NINCOMPOOP

+0

Вы хотите, чтобы BASIC 'ON ERROR RESUME NEXT'? На Java нет возможности. Бойлер - единственный способ. –

+0

Да @MarkoTopolnik Мне было только нужно это ... но теперь мне нужно найти альтернативное решение – commit

ответ

9

Да, это возможно без блока finally.

try{ 
    statement A; 
} 
catch(NullPointerException NPE){.....} 
try{ 
    statement B; 
} 
catch(NullPointerException NPE){.....} 
try{ 
    statement C; 
} 
catch(NullPointerException NPE){.....} 

На стороне примечания, я действительно не думаю, что это хорошо. Если вам удалось подойти к точке, где вам нужен такой контроль потока, вам нужно сделать шаг назад и переосмыслить свой код.

+0

Это не сработает для меня, у меня есть сотни строк, поэтому у меня остается только вариант: проверка первого объекта равна null или не для всех , – commit

+1

Я не знаю кода, но если у вас есть сотни строк, которые нуждаются в одном и том же обращении, вы действительно должны переосмыслить свои проекты. По крайней мере, это звучит так, как что-то там можно улучшить. – Campfire

1

Невозможно выполнить инструкцию B, если A выбрасывает исключение. Один из способов - это отдельный блок try/catch, а другой путь - включение остальных строк в блок.

-1

Как уже упоминалось в darijan, вы можете поместить каждое отдельное заявление в собственный try-catch. Или, если вы знаете, что может вызвать исключение, вы можете просто проверить его Befor вы выполняете ваши заявления

try{ 
    if(parameterForStatementA != null) { 
     statementA; 
    } 
    if(parameterForStatementB != null) { 
     statementB; 
    } 
    if(parameterForStatementC != null) { 
     statementC; 
    } 
} catch(Exception e) { 
    // something unexpected happened 
} 

Проверка параметров, как правило, более эффективно, чем отлов выброшено исключение

+0

Это не ответило на вопрос, который задал ОП. –

1

Если ваши заявления похожи и могут быть paramerized, использовать цикл:

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 с Somthing так:

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) { 

    } 
}