web-dev-qa-db-fra.com

Qu'est-ce que les crochets / parenthèses () dans try catch in Java

Selon mes connaissances, nous utilisons try catch comme suit:

try {
   //Some code that may generate exception
}
catch(Exception ex) {
}
   //handle exception
finally {
   //close any open resources etc.
}

Mais dans un code que j'ai trouvé à la suite

try(
    ByteArrayOutputStream byteArrayStreamResponse  = new ByteArrayOutputStream();                   
    HSLFSlideShow   pptSlideShow = new HSLFSlideShow(
                                      new HSLFSlideShowImpl(
 Thread.currentThread().getContextClassLoader()
       .getResourceAsStream(Constants.PPT_TEMPLATE_FILE_NAME)
                                     ));
 ){
}
catch (Exception ex) {
       //handel exception
}
finally {
      //close any open resource
}

Je n'arrive pas à comprendre pourquoi cette parenthèse () juste après avoir essayé.

Quelle en est l'utilité? Est-ce nouveau dans Java 1.7? Quel type de syntaxe puis-je y écrire?

Veuillez également me renvoyer certains documents API.

28

C'est essayer avec la syntaxe des ressources qui est nouvelle dans Java 1.7. Il est utilisé pour déclarer toutes les ressources qui peuvent être fermées. Voici le lien vers la documentation officielle. https: // docs.Oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
               new BufferedReader(new FileReader(path))) {
    return br.readLine();
}
}

Dans cet exemple, la ressource déclarée dans l'instruction try-with-resources est un BufferedReader. L'instruction de déclaration apparaît entre parenthèses immédiatement après le mot clé try. La classe BufferedReader, dans Java SE 7 et versions ultérieures, implémente l'interface Java.lang.AutoCloseable. Étant donné que l'instance BufferedReader est déclarée dans une instruction try-with-resource, elle sera fermée indépendamment de si l'instruction try se termine normalement ou brusquement (en raison de la méthode BufferedReader.readLine lançant une IOException).

35
Prasad Kharkar