1

Je travaille avec ces méthodes de générateur de classe:Java, essayez-enfin sans prise

public void executeAction(String s) throws MyException { 
    if (s.equals("exception")) 
     throw new MyException("Error, exception", this.getClass().getName()); 
} 

public void close() { 
     System.out.println("Closed"); 
} 

Je les ai utilisé avec ce code:

public void execute() throws MyException 
    Generator generator = new Generator(); 
    try { 
     String string = "exception"; 
     generator.executeAction(string); 
    } finally { 
     generator.close(); 
    } 

}

Dans principal j'ai manipulé l'exception:

try { 
     manager.execute(); 
    } catch (MyException e) { 
     System.err.println(e.toString()); 
    } 
} 

En main je peux l'attraper. Est-ce un comportement normal?

+2

Pourquoi cette exception devrait-elle être supprimée? – user2357112

+0

Désolé, je corrige la question – Stefano

+0

entre finalement en jeu exception ou non. Donc, si une exception est levée et non interceptée, cela n'affecte finalement pas – efekctive

Répondre

1

Oui, c'est un comportement normal. Au moins, il s'assure que le générateur est fermé, mais pourrait supprimer l'exception dans le bloc try si finalement il déclenche une exception.

Avec java7 vous devriez utiliser try-with-resources.

  1. Avez Generator mettre en œuvre AutoCloseable, il applique la méthode .close() vous avez déjà si aucun changement réel en plus des outils.

  2. Changer votre méthode execute utiliser essayer avec-ressources

à

try(Generator generator = new Generator()) { 
     String string = "exception"; 
     generator.executeAction(string); 
    } 

L'avantage est, en plus moins de code, que l'exception supprimée que @Mouad mentionné est traitée correctement . L'exception de l'appel .close() est disponible à partir de e.getSuppressedException()

0

Oui, c'est le comportement correct. Les exceptions supprimées sont extraites de l'instruction try-with-resources, ce qui n'est pas votre cas. Jetez un oeil à What is a suppressed exception?

0

Vous obtiendrez une exception supprimée lorsque, par exemple votre méthode Generator.close() renvoie une exception -Dans enfin bloc-:

public void close() { 
    throw new OtherException("some msg");//This Exception will be added to your main Exception (MyException) as a Suppressed Exception 
    System.out.println("Closed"); 
} 

Alors oui, cela est un comportement normal.