2017-05-18 3 views
1

J'essaie de comprendre la gestion des exceptions en Java et je continuer à courir dans les variations de la déclaration ci-dessous mentionné confusion dans plusieurs articles -Quelle est la signification de cette déclaration d'un blog disant qu'une fonction doit déclarer Throwable à la signature de la méthode pour l'attraper?

Il y a plusieurs raisons pour lesquelles par exemple la capture de java.lang.Throwable est mauvaise idée, parce que afin de les attraper, vous devez déclarer à votre signature de méthode par exemple public void doSomething() jette Throwable.

Ceci est de http://javarevisited.blogspot.com/2014/02/why-catching-throwable-or-error-is-bad.html#ixzz4hQPkFktf

Cependant, ce code compile -

class CatchThrowable 
{ 

    void function() 
    { 

     try 
     { 
      throw new Throwable(); 
     } 
     catch (Throwable t) 
     { 

     } 
    } 

    public static void main(String[] args) 
    { 

     try 
     { 

     } 
     catch (Throwable t) 
     { 

     } 
    } 
} 

Les deux principaux et la fonction sont capables d'attraper Throwable sans déclarer qu'ils jettent. Ma compréhension est que le throws mot-clé est utilisé pour déclarer les exceptions vérifiées qu'une fonction jette, pas ceux qu'elle attrape. Veuillez clarifier la déclaration citée.

+0

Si vous l'attrapez dans la méthode, la méthode ne la jette pas * à l'extérieur *. Capiche? – Kayaman

+0

oui, je pense que le tutoriel signifiait que la méthode qui jetterait l'exception devrait avoir 'throws Exception' dans sa signature – Yazan

+0

Je ne pense pas que le blog rende cela très clair. Connexe: http://stackoverflow.com/questions/6083248/is-it-a-bad-practice-to-catch-throwable –

Répondre

1

La déclaration:

afin de les attraper, vous devez déclarer à votre signature de la méthode par exemple public void doSomething() jette Throwable.

est fondamentalement faux.

Vous avez juste à comprendre ce qui suit. Il existe une exception Hiérarchie enter image description here Une méthode peut lancer tous les types d'exception, cela dépend simplement de vos besoins que vous attrapez et lequel ne l'est pas.

Il est également pas une bonne idée de prendre Error (qui comprend que vous ne devriez pas aussi attraper Throwable) parce qu'il ya certains de graves comme JMV- VirtualMachineErrorOutOfMemoryError que vous devriez généralement pas attraper.

Mais cela n'a rien à voir avec le fait, qu'une méthode déclare dans sa partie throws.