Есть ли java-эквивалент vb при ошибке/возобновлении следующего шаблона?

В VB для отлова ошибок есть

Public Sub MySub()
    On Error GoTo Errr
    'do stuff
Errr:
    'handle error
    Resume Next
End Sub

который использует великолепную команду Resume Next.

В Java у вас есть блок try catch

try 
{
//some code
}
catch (Exception e)
{
//handle error
}

что кажется эквивалентным перехвату ошибок VB, но, в частности, без опции Resume Next, поэтому Java просто завершает весь блок кода после ошибки, вместо того, чтобы пытаться запустить остальную часть кода после ошибки. Есть ли способ использовать возможности Resume Next в Java? Спасибо!


person chiliNUT    schedule 19.04.2013    source источник


Ответы (2)


Просто поместите код, который вы хотите запустить независимо от ошибки, после блока catch.

try {
    // stuff that could cause error
} catch(Exception e) {
    // handle error
}

// do stuff

Если вы собираетесь сгенерировать исключение из блока catch, но все же хотите, чтобы выполнялся код «сделать что-то», вы можете поместить его в блок finally следующим образом:

try {
    // stuff that could cause error
} catch(Exception e) {
    // throw exception here
} finally {
  // do stuff that will run even when the exception is thrown
}
person clav    schedule 19.04.2013
comment
Это нехорошо для меня. Размещение кода в конце или в блоке finally предполагает, что я знаю, какой код допустил ошибку, т. е. предполагается, что я знаю оставшийся код, который будет выполняться в конце или в блоке finally, что не так. Кроме того, он будет срабатывать только один раз, а не для каждой ошибки, как это делает Resume Next. Но спасибо за быстрый ответ. - person chiliNUT; 19.04.2013
comment
on error resume next просто говорит продолжить со следующей строки в случае ошибки. Если вы не уверены, что произошло, и просто хотите продолжить со следующей строки, независимо от того, какая строка вызвала ошибку, то вы, очевидно, хотите просто игнорировать ошибки? Трудно правильно обработать исключение, если вы не знаете, что его вызвало, поэтому просто продолжать работу кажется нецелесообразным. Вы можете сделать это, обернув каждую строку блоком try/catch и просто имея пустой блок catch, который проглатывает исключение, но я бы не советовал этого делать, поскольку вам, вероятно, следует что-то делать, если возникает исключение. - person clav; 19.04.2013
comment
В настоящее время я делаю именно это, оборачивая каждую строку блоком try catch. Так что я должен быть более конкретным, это код SQL; много столовых добавлений и падений. Для моих целей мне не нужно обрабатывать ошибку, мне просто нужна распечатка исключения и чтобы оно продолжало пытаться добавлять и удалять другие таблицы. - person chiliNUT; 19.04.2013

В Java нет эквивалента операторам возобновления VB; в VB, в зависимости от случая ошибки, вы можете выбрать возобновление с определенной метки в вашем коде, чтобы повторно запустить код после исправления ошибки, аналогично оператору goto; это невозможно в java, за исключением случаев, когда вы находитесь внутри цикла, тогда вы можете использовать переход к определенному блоку меток.

person jad    schedule 18.08.2014