Essayez Avec des Ressources vs Try-Catch
J'ai été en regardant le code, et j'ai vu essayer avec des ressources. J'ai utilisé le standard de l'instruction try-catch avant et on dirait qu'ils font la même chose. Donc ma question est Essayer Avec des Ressources vs Try-Catch quelles sont les différences entre ceux-ci, et ce qui est mieux.
Voici un essai avec des ressources :
objects jar = new objects("brand");
objects can= new objects("brand");
try (FileOutputStream outStream = new FileOutputStream("people.bin")){
ObjectOutputStream stream = new ObjectOutputStream(outStream);
stream.writeObject(jar);
stream.writeObject(can);
stream.close();
} catch(FileNotFoundException e) {
System.out.println("sorry it didn't work out");
} catch(IOException f) {
System.out.println("sorry it didn't work out");
}
la différence est que vous n'avez pas besoin d'appeler flux.close() dans le try-wth-ressource. Elle est appelée automatiquement af si vous aviez une clause finally qu'il se ferme. Seuls les objets implmenting Fermer ou AutoCloseable peut être utilisé dans le try-with-ressource de la clause.
Vous n'avez pas besoin de (ou plus probablement ne devrait pas) appel
Vous n'avez pas besoin de (ou plus probablement ne devrait pas) appel
stream.close();
dans try{..}
section. Il devrait être fait dans finally
section try-with-resources sera gérer pour vous (BTW try-with-resources peut gérer de multiples ressources).OriginalL'auteur computerquest | 2014-10-22
Vous devez vous connecter pour publier un commentaire.
Le principal point de try-with-resources est de s'assurer que les ressources sont fermés, sans exiger le code de l'application pour le faire. Il y a quelques petits points à considérer, cependant.
Lorsque vous n'utilisez pas le try-with-resources il y a un écueil potentiel appelée exception de masquage. Lorsque le code dans un bloc try déclenche une exception, et la méthode close de l', enfin, déclenche une exception, l'exception levée par le bloc try est perdu et l'exception levée dans la reçoit enfin propagées. C'est généralement malheureux, car l'exception est jeté sur la proximité est quelque chose d'inutile, alors que la durée de l'exception de l'informatif. Utilisation de try-with-resources pour fermer vos ressources permettra d'éviter toute exception de masquage.
Dans le cadre de veiller à l'exception de masquage ne pas perdre d'importantes informations sur l'exception, lorsque le try-with-resources a été développée ils avaient à décider quoi faire avec les exceptions levées à partir de la méthode close.
Avec try-with-resources, si le bloc try déclenche une exception et de la méthode lève une exception, alors l'exception de la fermer bloc obtient cloué à l'exception d'origine:
D'autre part, si votre code s'exécute normalement, mais les ressources que vous utilisez déclenche une exception près, que l'exception (qui serait supprimée si le code dans le bloc try a jeté quelque chose) est lancée. Cela signifie que si vous avez quelques code JDBC où un jeu de résultats ou PreparedStatement est fermé par un try-with-resources, une exception résultant de certaines infrastructures glitch quand JDBC objet sera fermé peut être jeté et pouvez reprendre une opération qui, autrement, aurait terminé avec succès.
Sans try-with-resources si la méthode close exception est lancée est à l'application du code. Si elle obtient jeté dans un bloc finally lorsque le bloc try déclenche une exception, à l'exception du bloc finally masque l'autre exception. Mais le développeur a la possibilité de capture de l'exception levée sur fermer et de ne pas la propager.
OriginalL'auteur Nathan Hughes
Vous avez manqué quelque chose, le
finally
bloc. Leessayez-avec-des ressources
permettra de faire quelque chose comme,Qui signifie que vous avez vraiment voulu quelque chose comme (jamais avaler des exceptions),
J'ai noté que, dans la dernière partie de ma réponse. Notez que l'OP est question a aucun
finally
bloc.OriginalL'auteur Elliott Frisch
La seule différence est que essayez-ressource est d'ajouter automatiquement
resource.close();
comme vous le feriez dans
finally
blocOriginalL'auteur Dima
N'importe quel objet (soit la classe ou de leur super-classe) qui implémente java.lang.AutoCloseable ou java.io.Fermer
peut être utilisé uniquement dans le try-with-ressources de la clause.
AutoClosable interface est l'interface parent et les Caisses de l'interface s'étend le AutoClosable interface.AutoClosable interface a la méthode close qui lève une Exception alors que les Caisses de l'interface a la méthode qui throws IOException.
Nous pouvons aussi avoir des captures et, enfin, bloc suivi d'essayer-avec-ressource ordinaire try, catch et enfin, de l'attraper et, enfin, bloc exécuté une fois que la ressource déclarée à l'intérieur de l'essayer-avec-des ressources de la clause est fermé.
OriginalL'auteur apurbojha