L'instruction TRY-WITH-RESORCES de Java est conçue pour simplifier la gestion des ressources, telles que les flux de fichiers ou les connexions de base de données, qui doivent être fermées après leur utilisation. Cette déclaration a été introduite dans Java 7 dans le cadre de la fonction de gestion automatique des blocs de ressources (ARM).
Pour utiliser l'instruction TRY-WITH-RESORCES, vous devez déclarer des variables de ressources qui implémentent l' AutoCloseable
ou son sous-interface Closeable
dans la clause try
. Ces ressources seront automatiquement fermées à la fin de l'instruction, que le bloc de code se termine normalement ou qu'une exception soit lancée.
Voici un exemple de la façon de l'utiliser:
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt")) { // Use the resources byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } // fis and fos are automatically closed here</code>
Dans cet exemple, FileInputStream
et FileOutputStream
Closeable
tous les deux, afin qu'ils puissent être utilisés dans un bloc TRY-With-Resources. Une fois le bloc terminé, ces flux sont automatiquement fermés, éliminant le besoin d'un bloc finally
pour les fermer manuellement.
L'instruction TRY-WITH-RESORCES peut gérer toute ressource qui implémente l'interface AutoCloseable
. AutoCloseable
est une interface de base en Java qui définit une seule méthode close()
qui est appelée automatiquement lorsque la ressource n'est plus nécessaire. L'interface Closeable
s'étend AutoCloseable
et est utilisée spécifiquement pour les ressources qui traitent des opérations d'E / S.
Les types de ressources courants qui peuvent être gérés comprennent:
FileInputStream
et FileOutputStream
, qui sont utilisés pour lire et écrire dans les fichiers.Connection
, Statement
et les objets ResultSet
utilisés pour les opérations de base de données.Socket
et ServerSocket
utilisés pour la communication réseau.AutoCloseable
et gère les ressources qui doivent être fermées. En implémentant AutoCloseable
, les développeurs peuvent créer leurs propres classes qui peuvent être utilisées dans un bloc TRY-With-Resources, assurant un nettoyage approprié des ressources.
L'instruction TRY-WITH-RESOURCES améliore la lisibilité et la maintenabilité du code de plusieurs manières:
finally
fermé pour fermer manuellement les ressources. Il en résulte moins de code et moins de lignes à maintenir.finally
peut parfois masquer ou interférer avec les exceptions lancées dans le bloc try
. TRYS-WITH-RESOURCES garantit que les ressources sont fermées sans masquer d'exceptions.Voici un exemple de comparaison des approches traditionnelles et essaies avec les ressources:
Traditionnel:
<code class="java">FileInputStream fis = null; try { fis = new FileInputStream("input.txt"); // Use fis } catch (IOException e) { // Handle exception } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { // Handle exception from closing } } }</code>
TRYS-WITH-RESOURCES:
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } // fis is automatically closed</code>
Ce dernier est beaucoup plus clair et réduit les chances de laisser les ressources ouvertes.
Lorsque vous utilisez des ressources TRY-With en Java, il est essentiel de suivre les meilleures pratiques pour la gestion des exceptions afin de maintenir la robustesse et la clarté de votre code:
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { // Handle IOException } catch (Exception e) { // Handle other exceptions }</code>
getSuppressed()
:<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { for (Throwable se : e.getSuppressed()) { // Handle suppressed exceptions } }</code>
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { for (Throwable se : e.getSuppressed()) { // Handle suppressed exceptions } throw new CustomException("Failed to process file", e); }</code>
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { logger.error("An error occurred while processing the file", e); for (Throwable se : e.getSuppressed()) { logger.error("Suppressed exception occurred", se); } }</code>
En suivant ces pratiques, vous vous assurez que votre code à l'aide de TRY-With-Resources gère les exceptions de manière propre et efficace, améliorant à la fois sa robustesse et sa maintenabilité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!