Действительно ли возможно обнаружить, если исключение произошло, прежде чем я вошел наконец блок?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

21
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Ваша идея об установке переменной вне объема попытки/выгоды/наконец корректна.

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

12
ответ дан 29 November 2019 в 21:47
поделиться

Вы могли всегда устанавливать булев флаг в своей выгоде (выгодах). Я не знаю ни о каком "гладком" способе сделать это, но тогда я - больше парня .NET.

2
ответ дан 29 November 2019 в 21:47
поделиться

Используйте вход...

try {   
   stream.write(buffer); 
} catch(IOException ex) {
    if (LOG.isErrorEnabled()) { // You can use log level whatever you want
        LOG.error("Something wrong: " + ex.getMessage(), ex);
    }
    throw ex;
} finally {   
    if (stream != null) {
        try {
            stream.close();
        } catch (IOException ex) {
            if (LOG.isWarnEnabled()) {
                LOG.warn("Could not close in finally block", ex);
            }
        }
    }
}
2
ответ дан 29 November 2019 в 21:47
поделиться

Вместо использования логического флага я бы сохранил ссылку на объект Exception. Таким образом, у вас не только есть способ проверить, произошло ли исключение (объект будет нулевым, если исключение не произошло), но вы также получите доступ к самому объекту исключения в вашем блоке finally, если исключение действительно произошло. Вам просто нужно не забыть установить объект ошибки во всех ваших блоках catch (в случае повторного создания ошибки).

Я думаю, что это отсутствующая функция языка C #, которую следует добавить. Блок finally должен поддерживать ссылку на базовый класс Exception аналогично тому, как его поддерживает блок catch, чтобы ссылка на распространяющееся исключение была доступна для блока finally. Это было бы простой задачей для компилятора ,

6
ответ дан 29 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: