Я столкнулся с одним сомнением в теме «Попробуйте с ресурсами».попробуйте с ресурсами
код программы:
public class Suppressed_Exception_Eg03
{
public static void main(String[] args)
{
try (Wolf obj = new Wolf(); Deer obj1 = new Deer();)
{
//Both close statements are executed .
//Therefore , we see two closing stmts
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
static class Wolf implements AutoCloseable
{
@Override
public void close() throws Exception
{
System.out.println("Closing Wolf !");
throw new RuntimeException("In Wolf !");
}
}
static class Deer implements AutoCloseable
{
@Override
public void close() throws Exception
{
System.out.println("Closing Deer !");
throw new RuntimeException("In Deer !");
}
}
Выход:
Closing Deer !
Closing Wolf !
In Deer !
Сомнения: Мы все знаем, что близки методы класса Deer будут закрыты первыми и после будет класс Wolf. Соответственно, исключение, вызванное классом Wolf, должно подавлять исключение, порожденное классом Дира. Итак, мы должны поймать исключение класса Волк в блоке catch. Но здесь мы видим, что в выпуске исключение класса Deer выловлено и напечатано. Может кто-нибудь объяснить, почему?
Отформатируйте свой код, отложив каждый блок на четыре пространства, убедившись, что каждая строка на том же блоке или том же уровне блока имеет отступы точно такой же суммы, что и остальные. Да, это придирчивый запрос, но опять же, мы добровольцы, и вы хотите приложить усилия, чтобы облегчить другим помощь вам. –
Исключение времени выполнения загружает вас из блока try. Если это мой код и проблема, я бы проверил байт-код. –
Чтение документации всегда так полезно: [* «Обратите внимание, что тесные методы ресурсов вызываются в обратном порядке их создания». * * (Https://docs.oracle.com/javase/tutorial/essential/exceptions/ tryResourceClose.html) ... – Tom