2014-04-08 9 views
18

अगर एक कोशिश के साथ-संसाधनों ब्लॉक के अंदर एक वापसी बयान डाल मैं सोच रहा हूँ में बयान लौट संसाधन अपने आप बंद किए जाने की रोकता है।प्रयास करें-साथ-संसाधनों और जावा

try(Connection conn = ...) { 
    return conn.createStatement().execute("..."); 
} 

अगर मैं कुछ इस तरह लिखने कनेक्शन बंद कर दिया होगा? ओरेकल दस्तावेज में यह कहा गया है कि:

प्रयास-संसाधन-संसाधन विवरण यह सुनिश्चित करता है कि प्रत्येक संसाधन कथन के अंत में बंद हो।

क्या होता है यदि कथन का अंत वापसी विवरण के कारण कभी नहीं पहुंचता है?

+0

विधि स्टैक पॉप होने पर बयान समाप्त होता है। अपवाद फेंकने पर आपको क्या लगता है? –

+1

'वापसी' 'अंत में 'खंड के शरीर के माध्यम से बहती है, जहां संसाधन जारी किए जाते हैं। –

उत्तर

28

Oracle's tutorial के आधार पर, "[संसाधन] बंद हो जाएगा चाहे प्रयास कथन सामान्य या अचानक समाप्त हो जाए"। यह अपवाद से abruptly को परिभाषित करता है।

try के अंदर लौटने से अचानक पूरा होने का एक उदाहरण है, जैसा कि JLS 14.1 द्वारा परिभाषित किया गया है।

+1

यह तकनीकी रूप से सच नहीं है। एक 'वापसी' कथन सामान्य रूप से पूरा नहीं होता है और इसलिए 'try' ब्लॉक सामान्य रूप से पूरा नहीं होता है। यह अचानक खत्म हो जाता है। –

+0

@ सॉटिरियोसेलिमैनोलिस, मैंने हमेशा यह माना है कि यह सामान्य था, लेकिन मुझे कोई दस्तावेज एक या दूसरे तरीके से नहीं मिला। क्या आप इस पर कोई दस्तावेज पा सकते हैं? – merlin2011

+1

मैं अपने फोन पर हूं :(। यदि आप अध्याय में जेएलएस में जाते हैं जिसमें कैच ब्लॉक शामिल है, तो सामान्य रूप से पूरा करने वाले परिभाषा को परिभाषित करने वाला एक अनुभाग भी है। वापसी विवरणों पर प्रवेश की तलाश करें। –

5

संसाधन स्वचालित रूप से बंद हो जाएगा (यहां तक ​​कि return कथन के साथ) क्योंकि यह AutoCloseable इंटरफ़ेस लागू करता है। यहां एक उदाहरण दिया गया है जो "सफलतापूर्वक बंद" आउटपुट करता है:

public class Main { 

    public static void main(String[] args) { 
     try (Foobar foobar = new Foobar()) { 
      return; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

class Foobar implements AutoCloseable { 

    @Override 
    public void close() throws Exception { 
     System.out.println("closed successfully"); 
    } 
} 
संबंधित मुद्दे