2014-06-09 9 views
25

Nelle risorse try-with di Java 7, non so quale ordine il blocco finale e la chiusura automatica avvengano. Qual è l'ordine?Le risorse sono chiuse prima o dopo l'ultima?

BaseResource b = new BaseResource(); // not auto-closeable; must be stop'ed 
try(AdvancedResource a = new AdvancedResource(b)) { 

} 
finally { 
    b.stop(); // will this happen before or after a.close()? 
} 

risposta

39

La risorsa viene chiusa prima della cattura o infine dei blocchi. Vedi questo tutorial.

Un'istruzione try-con-le risorse può avere pescato ed infine blocchi proprio come un normale istruzione try. In una dichiarazione try-with-resources, qualsiasi blocco catch o finally viene eseguito dopo che le risorse dichiarate sono state chiuse.

per valutare questo è un codice di esempio:

class ClosableDummy implements Closeable { 
    public void close() { 
     System.out.println("closing"); 
    } 
} 

public class ClosableDemo { 
    public static void main(String[] args) { 
     try (ClosableDummy closableDummy = new ClosableDummy()) { 
      System.out.println("try exit"); 
      throw new Exception(); 
     } catch (Exception ex) { 
      System.out.println("catch"); 
     } finally { 
      System.out.println("finally"); 
     } 


    } 
} 

uscita:

try exit 
closing 
catch 
finally 
+0

Pazzo. Quindi Try-with-resources non è un buon sostituto per try-catch-finally quando la risorsa è necessaria per gestire il problema. – Gustavo

+0

Le risorse non devono essere gestite nel blocco 'catch'. –

+0

Il blocco catch può richiedere la risorsa per completare l'attività. – Gustavo

Problemi correlati