728 Stimmen

Was bewirkt das Java-Schlüsselwort assert, und wann sollte es verwendet werden?

Was sind einige Beispiele aus der Praxis die Schlüsselrolle von Behauptungen zu verstehen?

1voto

SBTec Punkte 689

Assertion werden grundsätzlich verwendet, um die Anwendung zu debuggen oder es wird als Ersatz für die Ausnahmebehandlung für einige Anwendungen verwendet, um die Gültigkeit einer Anwendung zu überprüfen.

Assertion funktioniert zur Laufzeit. Ein einfaches Beispiel, das das ganze Konzept sehr einfach erklären kann, ist hier - _Welche Funktion hat das Schlüsselwort assert in Java?_ (WikiAnswers).

1voto

Chandan Purohit Punkte 2073

Assertions sind standardmäßig deaktiviert. Um sie zu aktivieren, müssen wir das Programm mit -ea Optionen (Granularität kann variiert werden). Zum Beispiel, java -ea AssertionsDemo .

Es gibt zwei Formate für die Verwendung von Assertions:

  1. Einfach: z. B. assert 1==2; // This will raise an AssertionError .
  2. Besser: assert 1==2: "no way.. 1 is not equal to 2"; Dies führt zu einem AssertionError, bei dem die angegebene Meldung ebenfalls angezeigt wird, und ist daher besser. Obwohl die eigentliche Syntax lautet assert expr1:expr2 wobei expr2 ein beliebiger Ausdruck sein kann, der einen Wert zurückgibt, ich habe es häufiger verwendet, um eine Nachricht zu drucken.

0voto

Guildenstern Punkte 1288

Ich weiß nicht, welche Geschichte sich hinter dieser Funktion in Java verbirgt. Aber ich habe eine Vorstellung davon, was assert verwendet werden können, die meines Erachtens in diesem Thread noch nicht angesprochen wurden.

Angenommen, Sie haben eine Aufzählung, die Sie einschalten:(†)

public enum Veggie {
    CAULIFLOWER,
    CARROT,
}

// Another class
switch (veggie) {
    case CAULIFLOWER: value = 5;
    case CARROT: value = 3;
}

†: Vielleicht werden gute Java-Compiler/Tools fehlende Enum-Werte statisch erkennen. In diesem Fall stellen Sie sich einfach vor, Sie finden einen Fehler und beheben ihn. Dann können Sie einen Regressionstest in den eigentlichen Code einfügen, indem Sie die unten beschriebene Technik anwenden.


Es gibt keine guten Standard Fall für diese. Sie sollten also wirklich sicherstellen, dass Sie alle Werte abdecken. Sie sollten sicherstellen, dass Sie den Switch-Block aktualisieren, wenn Sie eine neue Enum-Variante hinzufügen:

public enum Veggie {
    CAULIFLOWER,
    CARROT,
    TOMATO,
}

Es stellt sich jedoch heraus, dass dieser Code genau dann aufgerufen wird, wenn der Benutzer eine bestimmte Ansicht in Ihrer Webanwendung lädt. Und die Ansicht kann trotz dieses Fehlers bestehen bleiben: Es wäre ein Fehler, aber es lohnt sich nicht, das Laden der Ansicht zu stören (sagen wir, dass dem Benutzer nur ein paar falsche Zahlen angezeigt werden). Sie protokollieren also einfach eine Warnung:

switch (veggie) {
    case CAULIFLOWER: value = 5;
    case CARROT: value = 3;
    default: nonExhaustiveMatchOnEnum();
// […]
public static void nonExhaustiveMatchOnEnum() {
    String errorMessage: "Missing veggie";
    logger.warn(errorMessage);
}

Aber Sie tun Sie als Entwickler können einen solchen Fehler in fünf Minuten beheben, im Gegensatz zu den Benutzern Ihrer Webanwendung.

Sie können also einfach eine assert false :

public static void nonExhaustiveMatchOnEnum() {
    String errorMessage: "Missing veggie";
    assert false : errorMessage;
    logger.warn(errorMessage);
}

Jetzt wird die Anwendung lokal abstürzen, aber in der Produktion nur eine Warnung protokollieren (vorausgesetzt, Sie verwenden java -ea lokal, aber nicht in der Produktion).

-3voto

Grundsätzlich gilt, dass "assert true" funktioniert und "assert false" nicht. Schauen wir uns an, wie das funktionieren soll:

public static void main(String[] args)
{
    String s1 = "Hello";
    assert checkInteger(s1);
}

private static boolean checkInteger(String s)
{
    try {
        Integer.parseInt(s);
        return true;
    }
    catch(Exception e)
    {
        return false;
    }
}

-12voto

pavani Punkte 11

assert ist ein Schlüsselwort. Es wurde im JDK 1.4 eingeführt. Es gibt zwei Arten von assert s

  1. Sehr einfach assert Aussagen
  2. Einfach assert Erklärungen.

Standardmäßig werden alle assert Anweisungen werden nicht ausgeführt. Wenn eine assert Anweisung false erhält, wird automatisch ein Behauptungsfehler ausgelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X