2016-02-09 4 views
2

Пример:ли ресурсы без ссылки автоматически закрываются слишком при использовании примерочных с-ресурсов

try(ResultSet rs = DriverManager.getConnection(url, us, pw).createStatement().executeQuery(sql)) { 

    //mycode 
} 

У меня нет никаких ссылок на Connection или Statement, они будут закрыты тоже, и если они делают то, что приказ?

благодаря

+0

Смотрите этот вопрос для обсуждения на тему: http://stackoverflow.com/questions/12552863/correct-idiom-for-managing-multiple-chained -resources-in-try-with-resources-bloc – thst

ответ

4

Согласно language specification, это будет только закрыть ResultSet объект. Это происходит потому, что заявление примерочных с-ресурсов использует спецификации ресурсов, где ресурс объявлен с использованием переменной:

TryWithResourcesStatement:

try ResourceSpecification Block [Catches] [Finally]

ResourceSpecification:

(ResourceList [;])

ResourceList:

Resource {; Resource}

Resource:

{VariableModifier} UnannType VariableDeclaratorId = Expression

+0

это правильно: ресурсы в моем коде будут закрыты автоматически, закрывая единственную доступную ссылку, которая является ResultSet rs, аналогично тому, что ресурсы, которые были обернуты другими ресурсами например: новый OutputStream (новый FileOutputS tream()) FileOutputStream будет закрыт автоматически, закрыв OutputStream –

+1

@Seyjowzeetaapoogiukaagee Нет, это не так. Закрытие 'ResultSet' не закрывает' Statement' и 'Connection'. – manouti

+0

Что относительно вложенных потоков? будут ли закрытые потоки закрыты, если оператор try-with-resource закрывает самый удаленный поток. –