Java наконец блокирует и выдает исключение на уровне метода - PullRequest
9 голосов
/ 30 июня 2011

В readFileMethod1, IOException явно перехватывается перед тем, как выбросить его на уровне метода, чтобы гарантировать выполнение блока finally. Однако необходимо ли ловить исключение? Если я удаляю блок catch, показанный в readFileMethod2, выполняется ли также блок finally?

private void readFileMethod1() throws IOException {
    try {
        // do some IO stuff
    } catch (IOException ex) {
        throw ex;
    } finally {
        // release resources
    }
}

private void readFileMethod2() throws IOException {
    try {
        // do some IO stuff
    } finally {
        // release resources
    }
}

Ответы [ 5 ]

7 голосов
/ 30 июня 2011

finally по-прежнему выполняется независимо от того, перехватываете ли вы IOException.Если все, что делает ваш блок catch, это rethrow, то в этом нет необходимости.

4 голосов
/ 30 июня 2011

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

И да, блок finally все равно будет выполнен.

2 голосов
/ 30 июня 2011

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

1 голос
/ 30 июня 2011

, наконец, выполняется всегда, независимо от того, выброшено исключение или нет. Только если JVM отключается во время выполнения блока try или catch, предложение finally не будет выполнено. Аналогично, если поток, выполняющий код try или catch, прерывается или уничтожается, блок finally может не выполняться, даже если приложение в целом продолжается.

1 голос
/ 30 июня 2011

наконец всегда выполняется в контексте try catch ... для дополнительной информации проверьте http://download.oracle.com/javase/tutorial/essential/exceptions/finally.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...