Als ich Java-Quellcode studierte, entdeckte ich das ungewöhnliche Schlüsselwort „asset“. Lassen Sie uns die Verwendung dieses Schlüsselworts direkt vorstellen.
Was ist Assert?
Es ist ein neu hinzugefügtes Schlüsselwort nach jdk1.4 und nicht mehr vorhanden.
Welche Funktion hat Assert?
assert wird in vielen Programmiersprachen zur Behauptung verwendet.
Aber was ist eine Behauptung?
Ist es nur eine einfache Beurteilung, ob ein boolescher Ausdruck wahr ist?
Okay, mit diesen Fragen kommen wir gleich zur Sache.
Behaupten, behaupten;
Wenn wir uns die Übersetzung von „asser“ ansehen, können wir sehen, dass „asser“ Behauptung, Aufrechterhaltung und Beständigkeit bedeutet.
Mit anderen Worten, die folgenden Bedingungen (Verbindung zur Diebstahlsicherung: Dieser Artikel wurde ursprünglich von http://www.cnblogs.com/jilodream/ veröffentlicht) müssen erfüllt und eingehalten werden, andernfalls liegt ein Fehler vor wird auftreten.
Die Verwendung von Assert
Die Verwendung von Assertion umfasst zwei Teile
(1) Die Verwendung von Schlüsselwörtern im Code:
assert kann auf zwei Arten verwendet werden:
1) „assert BooleanCondition“;
assert wird von einem booleschen Ausdruck gefolgt.
Wenn der Wert des Ausdrucks wahr ist, werden die aktuellen Bedingungen als den Anforderungen entsprechend betrachtet und der Geschäftscode wird weiterhin ausgeführt.
Wenn der Wert des Ausdrucks falsch ist, wird davon ausgegangen, dass die aktuelle Bedingung die Anforderungen nicht erfüllt, und es wird sofort ein AssertionError ausgelöst.
AssertionError erweitert Error erweitert Throwable.Throw ist eine Klasse, die selten verwendet wird. Sie hat auch eine Unterklasse namens Exception. Fehler wie Ausnahmen sind schwerwiegende Probleme, die das System nicht abfangen sollte.
2) „assert BooleanCondition:Excepiton“
assert folgt ein boolescher Ausdruck und ein Ausdruck, dessen Rückgabewert ein Basistyp ist.
Wenn der Ausdruck wahr ist, fahren Sie mit der Ausführung fort (Anti-Diebstahl-Verbindung: Dieser Artikel wurde ursprünglich von http://www.cnblogs.com/jilodream/ veröffentlicht) und führen Sie den verbleibenden Geschäftscode und den Ausdruck aus Der folgende ':' wird nicht ausgeführt.
Wenn der Ausdruck falsch ist, wird der Ausdruck nach „:“ ausgeführt und das Ergebnis wird in der AssertionError-Ausnahme platziert und ausgelöst.
Das Folgende ist ein Codebeispiel:
public class assertStudy { public static void main(String args[]) { assert 1 == 1; System.out.println("A Go!"); System.out.println("\n-----------------------------------------------\n"); assert 1 != 1 : "Wrong"; System.out.println("B Go!"); } }
(2) Gültigkeit von Schlüsselwörtern
Fügen Sie einen Haltepunkt an der obigen Behauptung hinzu. Beim Debuggen wird ein Haltepunkt gefunden. Es gab überhaupt keine Pause, sondern wurde direkt übersprungen.
Warum passiert das? Dies liegt daran, dass das Assert-Schlüsselwort vom Java-Startelement konfiguriert wird.
Sie müssen beim Start den Schalter über -ea einschalten
Java -ea AssertStudy
Auf diese Weise werden wir sehen, dass der Haltepunkt aktiviert ist Die Assert-Zeile wird wirksam (standardmäßig nicht aktiviert).
Und
Java -da AssertStudy, daher wird Assert ungültig gemacht
Die Methode zum Aktivieren der Schlüsselwortgültigkeit in Eclipse ist wie folgt:
Menü auswählen: Ausführen --->Ausführen...--->Wählen Sie die Registerkarte „Argumente“ aus und geben Sie „-ea“ in das Textfeld „VM-Argumente“ ein, wenn Sie „-da“ eingeben , es bedeutet, dass Behauptungen verboten sind
(Wenn Sie den oben genannten Pfad nicht finden können, öffnen Sie bitte die (Anti-Diebstahl-Verbindung: Dieser Artikel wurde zuerst von http://www.cnblogs.com/jilodream/ veröffentlicht) Um die Behauptung zu aktivieren: Windows -> Einstellungen -> Java -> Installierte JREs -> Klicken Sie auf Jetzt verwendetes JDK -> Bearbeiten -> Standard-VM-Argumente. Geben Sie in das Textfeld ein: -ea)
Zur Notwendigkeit von Assert
Durch die Erzählung von Assert haben wir festgestellt, dass es if in Java sehr ähnlich ist. Warum fügt Java ein solches Schlüsselwort hinzu? Und sollte es in einer Folgeversion wie jdk1.4 hinzugefügt werden?
Achten Sie auf die Beschreibung von Assertion und die ausgelöste Ausnahme ist ein Fehler.
Das heißt, die ursprüngliche Absicht der Behauptung besteht darin, den Zustand zu beurteilen, dass bei normalem Gebrauch in der Umgebung kein Problem auftritt. Diese Codes erscheinen häufig in Kerncodes wie Basisklassen, Framework-Klassen und Tool-Klassen. Im normalen Betrieb dieser Codes gibt es keine Parameterausnahmen (Anti-Diebstahl-Verbindung: Dieser Artikel wurde erstmals unter http://www.cnblogs.com/jilodream/ veröffentlicht). Sobald jedoch bestimmte Schlüsselwerte durch Reflexion, dynamischen Proxy usw. geändert werden, führt dies zu einer großen Anzahl abnormaler Szenarien. Und wenn wir zum Schutz dieser Szenarien eine große Anzahl grundsätzlich unwirksamer Urteile hinzufügen, dann beeinträchtigen diese grundsätzlich unwirksamen Urteile nicht nur die Lesbarkeit und Einfachheit des Codes erheblich, sondern geben den Lesern auch das Gefühl, dass diese Anomalien auftreten Szenarien treten häufig auf und haben einen gewissen Einfluss auf die Systemleistung.
Assert kann durch Konfigurationselemente effektiv steuern, ob dieser Code wirksam wird. Dies ist tatsächlich ein sehr elegantes Verhalten.
ps Nachdem ich diesen Absatz geschrieben habe, habe ich große Lust auf TV-Shopping....
Einige andere Situationen
1. -ea und -da können hilfreich sein Eine bestimmte Ebene der Klassen- und Paketpfade ermöglicht eine flexiblere Kontrolle der Gültigkeit der Behauptung. Die spezifische Verwendung ist wie folgt:
-ea java -ea öffnet die Behauptung aller Benutzerklassen
-da java -da schließt die Behauptung aller Benutzerklassen
- ea: java - ea:MyClass1 Offene Behauptung von MyClass1
-da: java -da: MyClass1 Schließende Behauptung von MyClass1
-ea: java -ea:pkg1 Offene Behauptung von pkg1-Paket -da : java
-da:pkg1 Schließen Sie die Assertion des pkg1-Pakets
-ea:... java -ea:... Öffnen Sie die Assertion des Standardpakets (unbenanntes Paket)
-da :... java -da:... Schließen Sie die Behauptung des Standardpakets (unbenanntes Paket)
-ea:... java -ea:pkg1... Öffnen die Behauptung des pkg1-Pakets und seiner Unterpakete
-da:... java -da:pkg1... Schließen Sie die Assertion des Pakets pkg1 und seiner Unterpakete
-esa java -esa Öffnen Sie die Assertion der Systemklasse
-dsa java -dsa schließt die Assertion der Systemklasse
2. Die Verwendung von Assert bedeutet, dass Sie wissen, dass so etwas unter normalen Umständen nie passieren wird, aber Sie wissen auch, dass Dinge im Betriebssystem passieren und JVM werden gelegentlich unerklärliche Fehler auftreten, und es gibt keine Garantie dafür, dass jemand, der Ihren Code aufruft, Ihren Code anders aufruft als gedacht. Also:
1) Assert wird oft im Kernverarbeitungscode des Benutzers platziert. Wenn Sie sich den Java-Quellcode ansehen, werden Sie feststellen, dass der Quellcode viele Assert-Schlüsselwörter enthält.
2) Assert behandelt Situationen, die unter normalen Umständen nie auftreten werden, daher wird Assert in normalen Geschäftsprozessen verwendet.
3) Assert ist nicht vererbbar
Wenn die Assert-Funktion der übergeordneten Klasse aktiviert ist und die Assert-Methode der Unterklasse ausgeführt wird, wird die Unterklasse standardmäßig nicht aktiviert.
Im Gegenteil, wenn die Assert-Funktion der Unterklasse aktiviert ist und die Assert-Methode der übergeordneten Klasse ausgeführt wird, wird die Assert-Funktion der übergeordneten Klasse nicht aktiviert.
Referenzdokument
http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html
http://lavasoft.blog .51cto.com/62575/43735
http://www.zhihu.com/question/24461924