web-dev-qa-db-fra.com

Est-ce que chaque exception a un try-catch obligatoire?

Une question simple et je ne trouve pas la réponse à cette question ..___ Est-il nécessaire que toutes les exceptions en Java utilisent un try-catch? Ou est-ce uniquement pour l'exception FileNotFoundException?

Beaucoup d'exceptions (IndexOutOfBoundException, ArithmeticException, IlligalArgumentException, NullPointerException) disent qu'elles n'ont pas besoin d'exception, mais FileNotFoundException le fait) ... et je ne trouve pas la réponse qui le fait et qui n'a pas besoin de try-catch .

15
Youri

Il n'est pas absolument nécessaire d'avoir un bloc try/catch pour vos exceptions. Au lieu de cela, vous pouvez throw les attribuer à une personne capable de gérer l’exception correctement. 

Il existe 2 types d'exceptions: cochée et non cochée. Une exception Checked peut être considérée est une exception trouvée par le compilateur et celui-ci sachant qu'elle risque de se produire. Vous devez donc catch ou throw il. Par exemple, ouvrir un fichier. Il a une chance d'échouer, et le compilateur le sait, vous êtes donc obligé de catch ou throw l'éventuelle IOException.

Une exception non vérifiée peut être considérée une exception susceptible de se produire, mais le compilateur ne le sait pas en fonction de votre code. En d'autres termes, c'est une erreur de programmation . Par exemple, si vous prenez les entrées de l'utilisateur et attendez un nombre et que l'utilisateur entre quelque chose que vous ne vous attendiez pas, tel qu'une chaîne, votre programme affichera une NumberFormatException. Vous pouvez prédire ces scénarios et mettez try/catch pour les éviter avant qu'ils ne se produisent. Très rarement, une personne ajoute un throws NullPointerException ou throws NumberFormatException (ou lève une autre exception non cochée, d'ailleurs). C'est autorisé, mais créer explicitement cette exception est bizarre et la plupart des gens diraient que c'est un mauvais style de codage.

Notez que toutes les suggestions cochées doivent être attrapées ou jetées vers quelque chose qui peut les gérer; si vous ne le faites pas, votre programme ne compilera pas. Si vous le jetez à quelque chose qui ne peut pas le gérer, alors votre programme va probablement planter si cela se produit.

Notez également qu'une exception non contrôlée (par exemple: une exception qui se produit pendant l'exécution, généralement via une mauvaise entrée utilisateur ou autre chose) provoquera également le blocage de votre programme. Par conséquent, il est généralement judicieux d'utiliser try/catch lorsque quelque chose peut potentiellement mal tourner, mais vous n'êtes pas obligé de .

Il est également intéressant de noter que, si les exceptions Checked sont des sous-classes d’exception et les exceptions Unchecked sont des sous-classes de RuntimeException, RuntimeException elle-même est une sous-classe d’Exception. Cela signifie que si vous le souhaitiez vraiment, une seule try {} catch (Exception e) {} interceptera chacune des exceptions que votre programme pourrait éventuellement générer. Certes, cela est considéré comme une façon horrible de traiter les exceptions, et vous devriez les prendre séparément pour pouvoir les traiter séparément. S'il vous plaît essayez de ne pas l'utiliser.

41
Aify

Non, toutes les exceptions ne nécessitent pas une tentative d'essais. Chaque exception cochée nécessite un catch try. Par exemple, une exception NullPointerException est une exception non contrôlée, de sorte qu'elle ne nécessite pas d'essayer d'attraper, alors qu'une exception FileNotFoundException est cochée, elle en nécessite donc un. Vous pouvez également ajouter des "lancers" à la signature de la méthode et ainsi éviter d'avoir à essayer un catch-catch.

2
Josh Edwards

Lire: https://docs.Oracle.com/javase/tutorial/essential/exceptions/

En règle générale, les exceptions vérifiées doivent être gérées ou levées Les exceptions et les erreurs non contrôlées peuvent être gérées ou levées (bien que le traitement de Erreur soit généralement considéré comme une mauvaise pratique).

L'exception cochée correspond à tout ce qui hérite de Java.lang.Exception

Une exception non contrôlée correspond à tout ce qui hérite de Java.lang.RuntimeException

L'erreur est tout ce qui hérite de Java.lang.Error

1
cbeutenmueller

Seules les exceptions explicites Checked doivent être interceptées. Pour d'autres exceptions, vous pouvez utiliser des "jets" à la signature de la méthode.

0
user2248671

Oui, mais si vous ne souhaitez pas le gérer dans votre méthode, vous pouvez transmettre l'exception à l'appelant de la méthode avec le mot clé throws. Exemple:

void execption() throws Exception {
    throw new Exception();
}

void caller() {
    try {
        execption();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Edit: Je suis un peu rouillé sur mon Java, comme josh a dit que vous pouvez avoir des exceptions non contrôlées qui n'ont pas besoin d'essayer/intercepter comme NullPointerException, mais vous pouvez en ajouter une si vous pensez qu'une exception non contrôlée peut être levée. Exemple:

Object obj = null;

obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here
0
J Atkin

Lorsqu'une méthode que vous appelez génère explicitement une exception, vous devez utiliser la boucle try....catch. Mais dans le cas de la liste que vous avez donnée sont toutes les exceptions d'exécution. Ils sont rejetés lorsqu'un programme contient parfois des intrants inattendus ou que le programme a été utilisé à des fins non prévues. Celles-ci ne nécessiteraient pas de boucle try....catch.

0
Blip