Question

    

Cette question a déjà une réponse ici:

         

Qu'est-ce assert faire? Par exemple, dans la fonction:

private static int charAt(String s, int d) {
    assert d >= 0 && d <= s.length();
    if (d == s.length()) return -1;
    return s.charAt(d);
}
Était-ce utile?

La solution

Si vous lancez votre programme avec -enableassertions (ou -ea pour faire court), alors cette déclaration

assert cond;

est équivalent à

if (!cond)
    throw new AssertionError();

Si vous lancez votre programme sans cette option, l'instruction assert aura aucun effet.

Par exemple, assert d >= 0 && d <= s.length();, telle que publiée dans votre question, équivaut à

if (!(d >= 0 && d <= s.length()))
    throw new AssertionError();

(Si vous avez lancé avec -enableassertions qui est.)


Formellement, le Java Language Specification : 14.10. La déclaration de assert dit ce qui suit:

  

14,10. La déclaration de assert    Une assertion est une déclaration assert contenant une expression booléenne. Une assertion est activé ou désactivé . Si l'affirmation est activée, l'exécution de l'affirmation provoque l'évaluation de l'expression booléenne et une erreur est signalée Si l'expression à false. Si l'affirmation est désactivée, l'exécution de l'assertion n'a pas que ce soit l'effet.

"activé ou désactivé" est contrôlé avec le commutateur -ea et "Une erreur est signalée" signifie qu'une AssertionError est levée.


Et enfin, une caractéristique moins connue de assert:

Vous pouvez ajouter : "Error message" comme ceci:

assert d != null : "d is null";

pour spécifier ce que le message d'erreur de la AssertionError doit être jeté.


Ce message a été réécrite comme un article .

Autres conseils

Si la condition est pas satisfaite, une AssertionError sera levée.

Assertions doivent être activées, cependant; sinon l'expression de assert ne fait rien. Voir:

http: // java. sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disable

assert est un outil de débogage qui forcera le programme à lancer une exception AssertionFailed si la condition est pas vrai. Dans ce cas, le programme lancera une exception si l'une des deux conditions suivantes il évaluer false. D'une manière générale, assert ne doit pas être utilisé dans le code de production

Bien que j'ai lu une documentation beaucoup sur celui-ci, je suis encore confus sur comment, quand et où l'utiliser.

il est très simple à comprendre:

Quand vous avez une situation similaire à ceci:

    String strA = null;
    String strB = null;
    if (2 > 1){
        strA = "Hello World";
    }

    strB = strA.toLowerCase(); 

Vous pouvez recevoir d'avertissement (affichage ligne jaune sur strB = strA.toLowerCase ();) que strA pourrait produire une valeur NULL à strB. Bien que vous savez que strB est absolument ne sera pas nulle à la fin, juste au cas où, vous utilisez assert à

1. Désactiver l'avertissement.

2. Jeter erreur d'exception si pire chose arrive (lorsque vous exécutez votre application).

Parfois, lorsque vous compilez votre code, vous ne recevez pas votre résultat et c'est un bug. Mais l'application ne plantera pas, et vous passer un moment très difficile de trouver où est l'origine de ce bogue.

Alors, si vous mettez assert, comme ceci:

    assert strA != null; //Adding here
    strB = strA .toLowerCase();

vous dire au compilateur que strA est absolument pas une valeur nulle, elle peut « pacifiquement » éteindre l'avertissement. S'il est NULL (pire des cas se produit), il arrête l'application et jeter un bug à vous localiser.

  

Cette version de l'instruction assert pour fournir un message détaillé pour le AssertionError. Le système passe la valeur de Expression2 au constructeur de AssertionError approprié, qui utilise la représentation de chaîne de la valeur en tant que message de détail de l'erreur.

     

Le but du message de détail est de saisir et de communiquer les détails de l'échec d'assertion. Le message devrait vous permettre de diagnostiquer et finalement corriger l'erreur qui a conduit l'affirmation à l'échec. Notez que le message de détail n'est pas un message d'erreur au niveau utilisateur, il est donc généralement pas nécessaire de rendre ces messages compréhensibles dans l'isolement, ou de les internationaliser. Le message de détail est destiné à être interprété dans le contexte d'une trace complète de la pile, conjointement avec le code source contenant l'assertion a échoué.

JavaDoc

Affirmations sont généralement utilisés principalement comme un moyen de vérifier le comportement attendu du programme. Elle devrait conduire à un accident dans la plupart des cas, étant donné que les hypothèses du programmeur sur l'état du programme sont fausses. C'est là l'aspect le débogage des affirmations entrent en jeu. Ils créent un point de contrôle que nous ne pouvons tout simplement pas ignorer si nous voulons avoir un comportement correct.

Dans votre cas, il fait la validation des données sur les paramètres entrants, mais il n'empêche pas les clients d'utiliser abusivement la fonction dans l'avenir. Surtout si elles ne sont pas, (et ne doit pas) être inclus dans la version construit.

Il veille à ce que l'expression renvoie true. Dans le cas contraire, il jette un java.lang.AssertionError.

http://java.sun.com /docs/books/jls/third_edition/html/statements.html#14.10

Assertion ne jette un AssertionError si vous exécutez votre application avec des affirmations sous tension.

int a = 42;
assert a >= 0 && d <= 10;

Si vous exécutez ce avec, par exemple: java -ea jar peiska.jar

Il est interdit de jeter un java.lang.AssertionError

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