Как я могу вырваться из блока try/catch без создания исключения в Java
Мне нужен способ вырваться из середины блока try/catch без исключения. Что-то похожее на разрыв и продолжение в течение циклов. Возможно ли это?
Я получаю странные throughts о бросании пользовательского исключения (называя его "BreakContinueException"), которое просто ничего не делает в своем обработчике catch. Я уверен, что это очень запутанно.
Итак, любое прямое решение, о котором я не знаю?
7 ответов
правильный способ сделать это, вероятно, разбить метод, поместив блок try-catch в отдельный метод и используя оператор return:
public void someMethod() {
try {
...
if (condition)
return;
...
} catch (SomeException e) {
...
}
}
Если код включает в себя множество локальных переменных, вы также можете использовать break
из помеченного блока, как предложено Стивен С:
label: try {
...
if (condition)
break label;
...
} catch (SomeException e) {
...
}
вы всегда можете сделать это с помощью break
из конструкции цикла или помеченного break
как указано в ответе aioobies.
public static void main(String[] args) {
do {
try {
// code..
if (condition)
break;
// more code...
} catch (Exception e) {
}
} while (false);
}
различными способами:
return
-
break
илиcontinue
когда в цикле -
break
чтобы пометить, когда в помеченном операторе (см. Пример @aioobe) -
break
когда в инструкции switch.
...
-
System.exit()
... хотя, возможно, ты не это имеешь в виду.
на мой взгляд, "break to label" - самый естественный (наименее искаженный) способ сделать это если ты просто хотите выйти из try / catch. Но это может сбить с толку начинающих Java-программистов, которые никогда не сталкивались с этой конструкцией Java.
но пока метки неясны, На мой взгляд, обертывание кода в do ... while (false)
, так что вы можете использовать break
Это худшая идея. Это смутит не новички а также новички. Лучше для новичков (и не новичков!), чтобы узнать о помеченных операторов.
кстати, return
строительство в том случае, когда вам нужно вырваться из finally
. Но вы должны избегать делать return
на finally
блок, потому что семантика немного запутана и может дать читателю головную боль.
есть несколько способов сделать это:
переместить код в новый метод и
return
от негооберните try / catch в
do{}while(false);
петли.
Это код, который я обычно делаю:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}
в этом примере в блоке 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