Подтвердить что ты не робот

Как я могу выйти из блока try/catch без исключения исключения в Java

Мне нужен способ прорваться из середины блока try/catch, не выбрасывая исключение. Что-то похожее на перерыв и продолжение для циклов. Возможно ли это?

Я получаю странные возможности о том, чтобы выбрасывать пользовательское исключение (называя его "BreakContinueException" ), которое просто ничего не делает в своем обработчике catch. Я уверен, что это очень искривлено.

Итак, любое прямое решение, о котором я не знаю?

4b9b3361

Ответ 1

Правильный способ сделать это, вероятно, состоит в том, чтобы разбить метод, поставив блок try-catch в отдельный метод и используя оператор return:

public void someMethod() {
    try {
        ...
        if (condition)
            return;
        ...
    } catch (SomeException e) {
        ...
    }
}

Если код содержит множество локальных переменных, вы можете также рассмотреть возможность использования break из помеченного блока, как предложено Stephen C:

label: try {
    ...
    if (condition)
        break label;
    ...
} catch (SomeException e) {
    ...
}

Ответ 2

Вы всегда можете сделать это с помощью break из конструкции цикла или помеченного break, как указано в ответе aioobies.

public static void main(String[] args) {
    do {
        try {
            // code..
            if (condition)
                break;
            // more code...
        } catch (Exception e) {

        }
    } while (false);
}

Ответ 3

Различные способы:

  • return
  • break или continue, когда в цикле
  • break для маркировки, когда в помеченном выражении (см. пример @aioobe)
  • break, когда в операторе switch.

...

  • System.exit()... хотя это, вероятно, не то, что вы имеете в виду.

По-моему, "break to label" - самый естественный (наименее искаженный) способ сделать это, если вы просто хотите выйти из try/catch. Но это может смущать начинающих программистов на Java, которые никогда не сталкивались с этой конструкцией Java.


Кстати, return работает в случае, когда есть finally. Но вам следует избегать использования return в блоке finally, потому что семантика немного запутанна и может дать читателю головную боль.

Ответ 4

Есть несколько способов сделать это:

  • Переместите код в новый метод и return из него

  • Оберните try/catch в цикле do{}while(false);.

Ответ 5

В этом примере в блоке catch я измените значение счетчика, и он сломается во время блока:

class TestBreak {
    public static void main(String[] a) {
        int counter = 0;

        while(counter<5) {
            try {
                counter++;
                int x = counter/0;
            }
            catch(Exception e) {
                counter = 1000;    
            }
        }
    }
}k

Ответ 6

Это код, который я обычно делаю:

 try
 {
    ...........
    throw null;//this line just works like a 'break'
    ...........   
  }
  catch (NullReferenceException)
  { 
  }
  catch (System.Exception ex)
  {
      .........
  }

Ответ 7

как насчет return он будет делать, если нет finally