2010-01-08 16 views
14

Quelqu'un peut-il expliquer comment gérer les exceptions d'exécution en Java?Gestion des exceptions Runtime en Java

+0

Je pense que les non-accepteurs de SO ont compris maintenant que ce sont des menaces vides. Nous voulons des points de mod! – danben

+1

je n'ai jamais vu accepter le bouton n'importe où? – Ravikanth

+0

C'est la grosse marque de correction/correction à côté d'une réponse. – Gordon

Répondre

34

Il ne diffère pas de la manipulation d'une exception régulière:

try { 
    someMethodThatThrowsRuntimeException(); 
} catch (RuntimeException ex) { 
    // do something with the runtime exception 
} 
+0

peut attraper les exceptions d'exécution ..? – Ravikanth

+3

Bien sûr! Toutes les sous-classes de 'Throwable' peuvent être capturées. –

+0

Je ne vois pas de problème avec cette question - J'ai eu un Runnable que je soupçonnais causer une erreur d'exécution et je ne savais pas que vous pouviez simplement emballer du code dans un try/catch & ajouter un catch RunTimeException. Je Googled'Android gestion des exceptions d'exécution », c'était la première question qui a été soulevée et cette réponse a fourni ce dont j'avais besoin. Sûrement c'est exactement comment SO devrait fonctionner? – Mitch

4

Si vous connaissez le type d'exception qui pourrait être jeté, vous pourriez attraper explicitement. Vous pouvez également attraper Exception, mais cela est généralement considéré comme une très mauvaise pratique car vous traiteriez alors les exceptions de tous les types de la même manière.

En règle générale, le point d'une exception RuntimeException est que vous ne pouvez pas le gérer correctement, et qu'ils ne sont pas attendus lors de l'exécution normale de votre programme.

+0

Sauf, peut-être, lorsqu'un composant personnalisé lève une exception RuntimeException car il ne parvient pas à atteindre un hôte donné sur le réseau et qu'il bloque votre application Android. –

2

Vous venez de les attraper, comme toute autre exception.

try { 
    somethingThrowingARuntimeException() 
} 
catch (RuntimeException re) { 
    // Do something with it. At least log it. 
} 
1

Je ne sais pas si vous parlez directement à RuntimeException en Java, donc je suppose que vous parlez des exceptions d'exécution. L'idée de base de la gestion des exceptions dans Java est que vous encapsulez le code qui, selon vous, pourrait déclencher une exception dans une instruction spéciale, comme ci-dessous.

try { 
    // Do something here 
} 

Ensuite, vous gérez l'exception.

catch (Exception e) { 
    // Do something to gracefully fail 
} 

Si vous avez besoin de certaines choses pour exécuter indépendamment du fait que l'exception est levée, ajouter finally.

finally { 
    // Clean up operation 
} 

Tous ensemble, il ressemble à ceci.

try { 
    // Do something here 
} 
catch (AnotherException ex) { 
} 
catch (Exception e) { //Exception class should be at the end of catch hierarchy. 
} 
finally { 
} 
+0

pouvons-nous attraper l'exception d'exécution? Comment c'est possible? sans connaître l'exception d'exécution, comment l'attraper par programme? – Ravikanth

+0

Vous pouvez utiliser 'catch (ExceptionType name) {}' pour intercepter tout type d'exception. Sinon, vous pouvez utiliser 'catch {}' pour intercepter toutes les exceptions, ou 'catch (nom d'exception) {}' pour intercepter toutes les exceptions (et avoir accès aux informations à leur sujet.) –

+0

@Ed: C'est correct.Mais si J'ai eu une erreur sur le serveur (problème de chargement). Ceci est l'exception d'exécution.Comment nous allons attraper cette exception par programmation? Est-ce possible? – Ravikanth

-1
try { 
      // a snippet resulting in Runtime Excception 
     } catch (Throwable e) { 
      e.printStackTrace(); 
      //Sys out or some logging 
     } 

De cette façon, nous pouvons gérer le Runtime Excception.

+3

Comme meilleure pratique, il n'est pas conseillé d'attraper "Throwable" Les erreurs sont aussi jetables et vous ne devriez pas attraper les erreurs, ce qui identifie les problèmes de jvm. Catch exceptions à la place – lemiorhan

+0

@otuzbesli Merci pour vos conseils. – chetan