Как я могу выйти из блока try/catch без исключения исключения в Java
Мне нужен способ прорваться из середины блока try/catch, не выбрасывая исключение.
Что-то похожее на перерыв и продолжение для циклов.
Возможно ли это?
Я получаю странные возможности о том, чтобы выбрасывать пользовательское исключение (называя его "BreakContinueException" ), которое просто ничего не делает в своем обработчике catch. Я уверен, что это очень искривлено.
Итак, любое прямое решение, о котором я не знаю?
Ответы
Ответ 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
Есть несколько способов сделать это:
Ответ 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