2016-11-21 3 views
0

У меня есть следующий код:Две близких методы в примерочной с-ресурсах

try(Socket s1=new Socket(...); Socket s2=new Socket(...);) 
{ 
    some logic... 
} 

Как я понял, Java закрывает s2 первыми, а затем s1. Что произойдет, если s2.close() выдает исключение? Будет ли Java пытаться закрыть s1 после предыдущего отказа?

+1

Да. try-with-resources гарантирует, что 'close' будет вызываться как' s2', так и 's1' (в этом порядке). –

+0

Является ли это поведение документированным где-то? Потому что я не могу найти его здесь: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html – Tony

ответ

3

Цитирование JLS Sec 14.20.3 (курсив мой):

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

Смежные вопросы