У меня такой код. В aMethod()
блок try, но нет блока catch для обработки исключенного aMethod()
. И полученный результат окончательно завершен. Может ли кто-нибудь объяснить мне, как это происходит?
public class Test
{
public static void aMethod() throws Exception
{
try /* Line 5 */
{
throw new Exception(); /* Line 7 */
}
finally /* Line 9 */
{
System.out.print("finally "); /* Line 11 */
}
}
public static void main(String args[])
{
try
{
aMethod();
}
catch (Exception e) /* Line 20 */
{
System.out.print("exception ");
}
System.out.print("finished"); /* Line 24 */
}
}
finally
всегда выполняется, исключение или нет *. Это то, что вызывает первую распечатку "finally"
которую вы видите.main
, где оно попадает в блок catch
, производя "exception"
."finished"
для завершения вывода. То есть, как, finally
, работает. Более того, если вы это сделаете
try {
throw new Exception();
} catch (Exception e) {
...
} finally {
...
}
код в обоих блоках catch
и finally
будет выполнен.
* Есть угловые случаи, когда вы можете построить программу, которая выходит без выполнения блока finally
, но это не имеет никакого отношения к коду в вашем примере.
Вы объявили aMethod()
как aMethod()
throws Exception
, поэтому он может выкинуть любое проверенное исключение и ничего не поймать.
throws
. Выход будет таким же.