Von Java reservierte Wörter reichen von denen, die Sie häufig sehen, bis zu denen, die Sie nicht sehr oft sehen. Ich werde kurz die seltenen zurückhaltenden Wörter vorstellen, die ich aufgrund meines eigenen Urteils und meiner Vorurteile gewählt habe.
Ich werde nicht zu sehr auf jedes Detail eingehen, damit es nicht zu lang wird.
Gemäß den Java-Sprachspezifikationen werden "reservierte Wörter" als "Schlüsselwörter" bezeichnet. Ich bin der Meinung, dass "reservierte Wörter" häufiger vorkommen, daher werde ich in diesem Artikel den Begriff "reservierte Wörter" verwenden.
Java Anfänger Es kann denjenigen bekannt sein, die mit Java bis zu einem gewissen Grad vertraut sind (Präventionslinie)
Java11
Schauen wir uns zunächst die Liste der reservierten Wörter an. Gemäß der offiziellen Sprachspezifikation gibt es ab Java 11 51 reservierte Wörter wie folgt. https://docs.oracle.com/javase/specs/jls/se11/html/jls-3.html#jls-3.9
abstract continue for new switch
assert default if package synchronized
boolean do goto private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
_ (underscore)
Ich werde einige davon aufgreifen und vorstellen.
assert Ein reserviertes Wort für die Verwendung von Assertion in Java. Ein Ausdruck beschreibt die Voraussetzungen, die beim Ausführen eines Programms erfüllt sein sollten, und ohne Angst vor Missverständnissen scheint es ein Mechanismus zu sein, um zu überprüfen, ob der Wert einer Variablen ein unerwarteter Wert ist usw. Es ist eine Sache.
Schreiben Sie nach dem Aktivieren einen bedingten Ausdruck. Wenn der Auswertungswert des bedingten Ausdrucks falsch ist, wird ein AssertionError ausgelöst. Beispielsweise kann damit überprüft werden, ob der Wert des Arguments der Methode der erwartete Wert ist.
//Teilung
private int divide(int x, int y) {
assert y != 0; //Y darf nicht 0 sein, da es sich um eine Division handelt
return x / y;
}
Außerdem werden Asserts nur wirksam, wenn Sie zur Laufzeit -enableassertions (oder -ea) angeben. Sie können es aktivieren oder deaktivieren, indem Sie die obige Option übergeben. Es kann während der Entwicklung aktiviert und während der Produktion deaktiviert werden.
const In der Sprache C usw. ist es ein reserviertes Wort zum Deklarieren einer Konstanten, in Java ist es ein reserviertes Wort, das keine Bedeutung hat. Es hat nichts zu bedeuten, aber es existiert aus irgendeinem Grund als reserviertes Wort. Die Verwendung von const hat keine syntaktische Bedeutung und führt zu einem Kompilierungsfehler.
Beachten Sie, dass Sie final anstelle von const verwenden sollten, um eine Konstante in Java zu deklarieren.
//Da es sich um ein reserviertes Wort handelt, erfolgt die Syntaxhervorhebung
const int num = 1;
//Error:
//Unzulässiger Ausdrucksbeginn
// const int num = 1;
// ^
default Es ist ein seltenes reserviertes Wort, das mehrfach verwendet wird. Es wurde hinzugefügt, als die Version stieg.
Beispiel für eine Switch-Anweisung
switch(i) {
case 1:
System.out.println("einer");
break;
case 2:
System.out.println("zwei");
break;
default:
System.out.println("Andere");
}
Anmerkungsbeispiel
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Range {
int min() default Integer.MIN_VALUE;
int max() default Integer.MAX_VALUE;
}
Beispiel für die Standardmethode der Schnittstelle
public interface Person {
default String name() {
return "unknown";
}
}
goto In der Sprache C usw. ist es ein reserviertes Wort, mit dem die Steuerung an einen beliebigen Ort übersprungen wird. Wie bei const handelt es sich jedoch um ein reserviertes Wort, das existiert, obwohl es in Java keine Bedeutung hat. Java hat keine Funktion, die goto entspricht. Der Missbrauch von goto kann die Lesbarkeit des Quellcodes erheblich beeinträchtigen, sodass in relativ modernen Sprachen häufig keine gleichwertige Funktionalität vorhanden ist.
Wie bei const handelt es sich natürlich bei der Verwendung um einen Kompilierungsfehler.
//Immerhin ist die Syntaxhervorhebung abgeschlossen
goto label;
//Error:
//Unzulässiger Ausdrucksbeginn
// goto label;
// ^
native Ein reserviertes Wort, das angibt, dass der Inhalt der Methode in einer Muttersprache wie C implementiert ist. Es wird mit JNI usw. ausgeführt.
public native boolean createDirectory(File f);
strictfp Dies ist ein reserviertes Wort, um zu verhindern, dass sich das Ergebnis der Gleitkommaberechnung abhängig von der Ausführungsumgebung ändert (sodass das Ergebnis in allen Ausführungsumgebungen gleich ist). Qualifizieren Sie Methoden und Klassen. Wenn Sie sich dagegen nicht mit strictfp qualifizieren, kann sich das Ergebnis der Gleitkommaberechnung je nach Ausführungsumgebung ändern.
Persönlich habe ich noch nie gesehen, dass es tatsächlich verwendet wird.
private strictfp double calc(double x, double y) {
return x * y;
}
transient Qualifizierte Felder unterliegen keiner Serialisierung. Serialisierung ist die Konvertierung des Inhalts eines Objekts, damit es in einer Datei gespeichert oder an einen anderen Computer gesendet werden kann. Durch die Qualifizierung mit transient wird das relevante Feld aus den serialisierten Daten ausgeschlossen.
public class Person implements Serializable {
private String firstName;
private String lastName;
private transient String fullName;
}
volatile
Unterdrückt die Optimierung von Single-Threaded-Annahmen für qualifizierte Felder.
Ich bin sicher, einige von Ihnen haben es gesehen, wissen aber nicht, was es bedeutet.
Ich bin mir auch nicht sicher. </ s>
Wenn der Compiler nicht für flüchtig qualifiziert ist, gibt er möglicherweise Bytecodes aus, die sich geringfügig von der Quelle für die Optimierung unterscheiden. Volatile unterdrückt diese Optimierung jedoch. Im Fall eines einzelnen Threads gibt es keinen besonderen Effekt, aber im Fall eines Multithreads kann die Optimierung durch den Compiler zu Inkonsistenzen führen. Volatile wird verwendet, um das Auftreten solcher Inkonsistenzen zu verhindern.
volatile boolean shutdownRequested;
...
public void shutdown() { shutdownRequested = true; }
public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}
Von https://www.ibm.com/developerworks/jp/java/library/j-jtp06197.html
Im obigen Beispiel erwarten wir, dass shutdown () aus der Schleife ausbricht, wenn es von einem anderen Thread aufgerufen wird, aber es funktioniert möglicherweise nicht wie erwartet, es sei denn, shutdownRequested ist mit volatile qualifiziert.
… Es sollte sein, aber als ich es tatsächlich ausprobierte, funktionierte es normal, auch ohne flüchtig. Bitte sagen Sie mir, wer damit vertraut ist! </ font>
_(underscore) In Sprachen wie Scala wird _ für Platzhalter usw. verwendet, Java verfügt jedoch nicht über eine solche Funktion. Wie const und goto ist es ein bedeutungsloses reserviertes Wort (Symbol?). _ Wurde vor relativ kurzer Zeit mit Java 9 zu einem reservierten Wort und kann zukünftige Verbesserungen vorwegnehmen.
int _ = 1;
//Error:
//Ab Release 9'_'Ist ein Schlüsselwort und kann nicht als Bezeichner verwendet werden
// int _ = 1;
// ^
widefp Im Gegensatz zu strictfp wird das Gleitkommaberechnungsergebnis umgebungsabhängig. Widefp wurde entfernt, da es sich jetzt standardmäßig so verhält.
Es ist ein bekanntes boolesches Literal. Tatsächlich sind dies keine reservierten Wörter in der Java-Sprachspezifikation. Nun, es kann nicht als Bezeichner verwendet werden, also ist es eigentlich wie ein reserviertes Wort.
null Es ist ein bekanntes Null-Literal. Wie das boolesche Literal kann es nicht als Bezeichner verwendet werden, ist jedoch kein reserviertes Wort in den Sprachspezifikationen.
open, module, requires, transitive, exports, opens, to, uses, provides, with
Beide wurden in Java 9 für die Modulfunktionalität hinzugefügt. Wenn Sie jedes einzelne aufheben, wird es lang sein und ich verstehe es nicht gut </ s>, daher werde ich die Erklärung weglassen.
Beide Wörter haben eine besondere Bedeutung, können jedoch als Variablennamen verwendet werden. Wahrscheinlich aus Kompatibilitätsgründen.
String module = "module";
var Wird für die von Java 10 hinzugefügte Typinferenzfunktion verwendet. Dies hat auch eine spezielle Bedeutung wie die oben genannten "eingeschränkten Schlüsselwörter", kann jedoch als Variablenname usw. verwendet werden. Dies ist möglicherweise kein reserviertes Wort für die Kompatibilität.
var var = 1;
Ich habe viele Dinge gesehen, von reservierten Java-Wörtern bis hin zu Dingen, die wie reservierte Wörter aussehen, aber keine reservierten Wörter sind. Ich würde mich freuen, wenn Sie denken könnten, dass es so etwas gibt.
https://docs.oracle.com/javase/specs/jls/se11/html/jls-3.html#jls-3.9 https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89_(Java) https://java.keicode.com/lang/assert.php https://www.wdic.org/w/TECH/strictfp https://www.ibm.com/developerworks/jp/java/library/j-jtp06197.html https://www.wdic.org/w/TECH/%E4%BA%88%E7%B4%84%E8%AA%9E%20%28Java%29
Recommended Posts