[JAVA] Que faire si j'écris une clause finally dans la syntaxe try-with-resources?

Question soudaine. Que se passe-t-il si vous écrivez une clause finally dans la syntaxe try-with-resources? Bien sûr, attendez-vous à ce que Closeable (AutoCloseable) #close spécifié dans la clause try soit appelé, et la clause finally sera également appelée.

Main.java


public class Main {

    public static void main(String[] args) throws Exception {
        try (Hoge hoge = new Hoge()) {
            System.out.println("try");
        } finally {
            System.out.println("finally");
        }
    }

    public static class Hoge implements AutoCloseable {

        @Override
        public void close() throws Exception {
            System.out.println("close");
        }
    }

}

résultat

try
close
finally

C'est exactement ce à quoi je m'attendais. (C'est vrai) Une fois décompilé, cela ressemble à ceci.

Main.java


public class Main2 {
    public static void main(String[] args) throws Throwable {
        try {
            Throwable arg0 = null;
            Object arg1 = null;
            try {
                Main.Hoge hoge = new Main.Hoge();
                try {
                    System.out.println("try");
                } finally {
                    if (hoge != null) {
                        hoge.close();
                    }
                }
            } catch (Throwable arg14) {
                if (arg0 == null) {
                    arg0 = arg14;
                } else if (arg0 != arg14) {
                    arg0.addSuppressed(arg14);
                }
                throw arg0;
            }
        } finally {
            System.out.println("finally");
        }
    }

    public static class Hoge implements AutoCloseable {
        public void close() throws Exception {
            System.out.println("close");
        }
    }
}

Recommended Posts

Que faire si j'écris une clause finally dans la syntaxe try-with-resources?
Androd: Que faire à propos de "Le Royaume est déjà dans une transaction d'écriture dans"
Ce que j'ai appris lors de la création d'un serveur en Java
Ce que je suis tombé sur le test ActiveModel :: Serializer
Même si j'écris le paramètre de STRICT_QUOTE_ESCAPING dans CATALINA_OPTS dans tomcat8.5, il n'est pas reflété.
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
Comment créer une partie d'espace réservé à utiliser dans la clause IN
J'étais confus parce qu'il y avait une scission dans le tableau
Ai-je besoin d'un test si je fais DDD dans une langue avec un type?
Que faire si vous obtenez une erreur gcc dans Docker
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
À propos de ce que j'ai fait lors de la création d'un fichier .clj avec Clojure
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (1)
J'ai récemment créé une application js dans le langage courant de Dart
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (3)
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Que faire si vous oubliez votre mot de passe root sur CentOS7
Que faire si l'image publiée par refile disparaît après avoir défini la page d'erreur 404 dans Rails
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
J'ai créé un PDF avec Java.
Qu'est-ce qu'un extrait de code en programmation?
Quelles sont les règles de JUnit?
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
Que faire si vous obtenez un avertissement groovy dans Thymeleaf Layout
Ecrire une casse nulle en utilisant le type facultatif sans utiliser l'instruction if
Que faire lorsque le préfixe c n'est pas lié dans JSP
Les paramètres que j'ai reçus dans Rails étaient un peu différents de ce à quoi je m'attendais
catch (Exception e) ou catch (IOException e) n'est pas requis dans la syntaxe try-with-resources
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
Je ne peux pas construire si je définis la destination de construction sur un simulateur avec XCode12!
Ce que j'ai fait lorsque JSF ne pouvait pas afficher les informations de la base de données dans la vue
[Swift / Débutant] Écrivons les fonctions autour de la communication dans un fichier séparé
Que faire si vous obtenez une exception javax.net.ssl.SSLHandshakeException: connexion de l'hôte distant fermée pendant l'établissement de liaison dans IBM JDK