Question

Alors que la lecture sur exception, je viendrai toujours à travers exceptions vérifiées et exceptions non vérifiées, donc voulu savoir comment distinguer ce qui est quoi?

Edit:? Je veux savoir si je crée une classe d'exception alors comment puis-je créer comme vérifié ou comme décochée

et quelle est la signification de chacun?

Était-ce utile?

La solution

Toutes les Throwables sauf sous-classes de java.lang.RuntimeException ou java.lang.Error sont vérifiés. Eh bien, en Java, « exceptions » sont sous-classes de java.lang.Exception, « erreurs » sont sous-classes de java.lang.Error et java.lang.Throwable est généralement pas directement sous-classées.

Les programmes ne sont pas censés créer leurs propres sous-classes de Error (bien que la documentation est assez ambiguë sur ce) de façon générale, vous créez toujours Exceptions, en utilisant un RuntimeException si vous ne voulez pas à vérifier.

Pour savoir à exécution si vous avez un coché exception vous pouvez utiliser:

if(throwable instanceof Exception && !(throwable instanceof RuntimeException)) {
    // this is a checked Exception
    }

A vérifié exception est celle qui doit être traitée soit dans une clause de capture, ou déclaré comme étant jeté dans la signature de méthode; le compilateur applique cela. En règle générale, on utilise des exceptions pour vérifier les exceptions qui doivent être pris en charge par le code d'appel, alors que non vérifiées exceptions sont des conditions qui sont le résultat d'une erreur de programmation et devrait être fixé en corrigeant le code.

Cela dit, il y a beaucoup de débats dans la communauté Java sur l'efficacité de l'utilisation partout exceptions vérifiées par rapport aux exceptions non vérifiées -. D'une manière profonde soumise à discuter dans cette réponse

EDIT 23/10/2012: En réponse aux commentaires (qui sont tout à fait valables), pour préciser, ce qui suit serait ce qui est nécessaire pour déterminer si un Throwable capturé est vérifiée Throwable , par opposition à une vérification Exception :

if(obj instanceof Throwable && !(obj instanceof RuntimeException) && !(obj instanceof Error)) {
    // this is a checked Throwable - i.e. Throwable, but not RuntimeException or Error
    }

Si l'objet en question est connu pour être une instance de Throwable (par exemple, il a été pris), seule la deuxième partie de ce qui précède « si » est nécessaire (par exemple des tests pour Throwable est redondant) .

Autres conseils

Voir la langage Java Spec, chapitre 11 :

  

Les classes d'exceptions non vérifiées sont les RuntimeException de classe et ses sous-classes, et la Error de classe et ses sous-classes. Toutes les autres classes d'exception sont vérifiées classes d'exception. L'API Java définit un certain nombre de classes d'exception, à la fois enregistrés et non enregistrés. classes d'exceptions supplémentaires, à la fois enregistrés et non enregistrés, peuvent être déclarés par les programmeurs.

Vous pouvez vérifier via instanceof lors de l'exécution, bien que je ne vois pas vraiment où cela serait utile.

Quant à la deuxième partie de votre question:

  • vérifiés exception représentent prévu des conditions d'erreur qui peuvent se produire lors de l'exécution normale du programme et ont donc toujours être manipulé par programme (qui applique le compilateur)

  • exception non contrôlée représentent des conditions d'erreur inattendues et signifie un état anormal de votre programme, en raison d'entrée invalides, des bugs ou des restrictions d'exécution (mémoire); le compilateur ne forcera pas le programmeur pour gérer ceux-ci, à savoir il suffit de prendre soin d'eux si vous connaissez leur occurrence

Si la classe d'exception est une sous-classe de RuntimeException, il est pas vérifié et ne doit pas être déclarée pour les fonctions ou pris, etc. Error exceptions aussi ne doivent pas être déclarés / pris. Est-ce que vous demandez?

Bien sûr que cela aura été de réponse avant, mais pour le plaisir de le faire, il est couvert assez bien ici: http://www.javapractices.com/topic/TopicAction.do?Id=129 .

A strictement parler, exceptions non vérifiées prolongeront toujours RuntimeException alors exceptions vérifiées ne le font pas. Le lien mentionné explique quand utiliser non plus.

Comme leur nom l'indique, les appelants sont tenus de traiter vérifiés exceptions, les manipuler en général (try/catch) ou de les transmettre plus haut dans la pile. exceptions non vérifiées sont généralement considérés comme étant causés par des éléments hors du contrôle de l'appelant.

package practice;

import java.io.IOException;

class Practice
{
    public static void main(String args[])
    {
        Exception n=new NullPointerException();
        if(n instanceof RuntimeException)
        {
            System.out.println("this is a runtime(unchecked) exception");
        }
        else
        {
            System.out.println("this is not a compiletime(checked) exception");
        }

    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top