Сегодня в колледже мы немного поговорили о try
, catch
и finally
. я запуталась в этих двух примерах:Наконец-то меня путают
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
} finally { // And we close it here
out.close();
}
В чем разница между закрытием файла в finally
, и если мы просто делали это так:
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
}
out.close();
Этот фрагмент кода после улова всегда будет выполнить.
Можете ли вы дать мне несколько хороших примеров различий между тем, когда мы используем finally
, и когда мы помещаем код после улова? Я знаю, что, наконец, всегда будет выполняться, но программа также будет работать после блокировки catch.
Что делать, если ваш улов сделал что-то вроде броска другого (возможно, неконтролируемого) исключения? Будет ли 'out.close()' запускаться в этой ситуации? Другими словами, просто печать трассировки стека и перемещение происходит не всегда, как обрабатывается исключение. – rmlan
Если вы повторно выбросите исключение или не поймаете все это, тогда блок finally станет вашим другом. Существуют также Тихие условия, которые не являются исключениями, а затем второй пример будет проблематичным. – KevinO
Я собираюсь начать узнавать о Throwable, поэтому, я думаю, мне нужно будет сначала изучить это, чтобы понять это, не так ли? –