Ich lese für SCJP und habe eine Frage zu dieser Zeile:
Bezeichner müssen mit einem Buchstaben, einem Währungszeichen ($) oder einem Verbindungszeichen wie dem Unterstrich (_) beginnen. Bezeichner können nicht mit einer Nummer beginnen!
Es besagt, dass ein gültiger Bezeichnername mit einem Verbindungszeichen wie einem Unterstrich beginnen kann. Ich dachte, Unterstriche wären die einzig gültige Option? Welche anderen verbindenden Charaktere gibt es?
java
unicode
identifier
scjp
Lucky Luke
quelle
quelle
_
" ein "veralteter" Bezeichner ist. Insbesondere gibt der Compiler die folgende Warnung aus: (Die Verwendung von '_' als Bezeichner wird in Releases nach Java SE 8 möglicherweise nicht unterstützt .)_
um sie in zukünftigen Sprachfunktionen zu verwenden . Bezeichner, die mit einem Unterstrich beginnen, sind noch in Ordnung, aber ein einzelner Unterstrich ist ein Fehler, wenn er als Lambda-Parametername und überall eine Warnung verwendet wird.. ; [ / < > :
: stackoverflow.com/questions/26791204/… docs.oracle.com/javase/specs/jvms/se7/html/… Alles andere ist eine reine Java-Einschränkung._, _ -> doSomething();
.Antworten:
Hier ist eine Liste der Verbindungszeichen. Dies sind Zeichen, die zum Verbinden von Wörtern verwendet werden.
http://www.fileformat.info/info/unicode/category/Pc/list.htm
Dies wird unter Java 7 kompiliert.
Ein Beispiel. In diesem Fall
tp
ist der Name einer Spalte und der Wert für eine bestimmte Zeile.Folgende
druckt
$ _ ¢ £ ¤ ¥ ¥ ৲ ৳ ৻ ૱ ௹ ฿ ៛ ‿ ⁀ ⁔ ₠ ₡ ₢ ₣ ₤ ₦ ₧ ₨ ₪ ₫ ₭ ₮ ₯ ﹩ $ _ ¢ £ £ ¥
quelle
int ৲, ¤, ₪₪₪₪;
: Dif( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀)
oderif ($ == $)
oderif (¢ + ¢== ₡)
oderif (B + ︳!= ฿)
Durchlaufen Sie die gesamten 65.000 Zeichen und fragen Sie
Character.isJavaIdentifierStart(c)
. Die Antwort lautet: "Undertie" Dezimal 8255quelle
(1 to 65535).map(_.toChar).filter(Character.isJavaIdentifierStart).size
- ergibt 48529 Zeichen ...Character.MAX_CODE_POINT
, was wahrscheinlich mehr als ist2<<16
.Die endgültige Spezifikation einer legalen Java-Kennung finden Sie in der Java-Sprachspezifikation .
quelle
L
[alles],Nl
,Sc
,Pc
.Hier ist eine Liste der Anschlusszeichen in Unicode. Sie finden sie nicht auf Ihrer Tastatur.
U + 005F LOW LINE _
U + 203F UNDERTIE ‿
U + 2040 CHARACTER TIE ⁀
U + 2054 INVERTED UNDERTIE ⁔
U + FE33 PRÄSENTATIONSFORMULAR FÜR VERTIKALE LOW LINE ︳
U + FE34 PRÄSENTATIONSFORMULAR FÜR VERTICAL WAVY LOW LINE ︴
U + FE4D DASHED LOW ﹍
U + FE4E CENTRELINE LOW LINE INE
U + FE4F WAVY LOW LINE ﹏
U + FF3F FULLWIDTH LOW LINE _
quelle
Ein Verbindungszeichen wird verwendet, um zwei Zeichen zu verbinden.
In Java ist ein Verbindungszeichen dasjenige, für das Character.getType (int codePoint) / Character.getType (char ch) einen Wert zurückgibt, der Character.CONNECTOR_PUNCTUATION entspricht .
Beachten Sie, dass die Zeicheninformationen in Java auf dem Unicode-Standard basieren, der Verbindungszeichen identifiziert, indem ihnen die allgemeine Kategorie Pc zugewiesen wird, die ein Alias für Connector_Punctuation ist .
Das folgende Code-Snippet:
Gibt die Verbindungszeichen aus, mit denen ein Bezeichner auf jdk1.6.0_45 gestartet werden kann
Das Folgende wird auf jdk1.6.0_45 kompiliert:
Anscheinend kann die obige Deklaration auf jdk1.7.0_80 & jdk1.8.0_51 für die folgenden zwei Verbindungszeichen nicht kompiliert werden (Abwärtskompatibilität ... oops !!!).
Abgesehen von den Details konzentriert sich die Prüfung nur auf den lateinischen Grundzeichensatz .
Auch für Recht identifers in Java, ist die Spezifikation zur Verfügung gestellt hier . Verwenden Sie die Zeichenklassen-APIs, um weitere Details zu erhalten.
quelle
Eines der unterhaltsamsten Zeichen, das in Java-Bezeichnern zulässig ist (jedoch nicht am Anfang), ist das Unicode-Zeichen "Zero Width Non Joiner" (& zwnj;, U + 200C, https://en.wikipedia.org) / wiki / Zero-width_non-joiner ).
Ich hatte dies einmal in einem XML-Teil in einem Attributwert, der einen Verweis auf einen anderen Teil dieses XML enthält. Da der ZWNJ "Nullbreite" hat, kann er nicht gesehen werden (außer wenn er mit dem Cursor läuft, wird er direkt auf dem vorherigen Zeichen angezeigt). Es war auch nicht in der Protokolldatei und / oder Konsolenausgabe zu sehen. Aber es war die ganze Zeit da: Kopieren und Einfügen in Suchfelder hat es bekommen und somit die referenzierte Position nicht gefunden. Durch Eingabe des (sichtbaren Teils der) Zeichenfolge in das Suchfeld wurde jedoch die angegebene Position gefunden. Ich habe eine Weile gebraucht, um das herauszufinden.
Das Eingeben eines Zero-Width-Non-Joiner ist eigentlich ziemlich einfach (zu einfach), wenn das europäische Tastaturlayout verwendet wird, zumindest in seiner deutschen Variante, z. B. "Europatastatur 2.02" - es ist mit AltGr + "." Erreichbar, zwei Tasten, die Leider befinden sie sich auf den meisten Tastaturen direkt nebeneinander und können leicht versehentlich zusammengeschlagen werden.
Zurück zu Java: Ich dachte gut, Sie könnten einen Code wie diesen schreiben:
Mit dem zweiten habe ich einen Nicht-Joiner mit der Breite Null angehängt (das kann ich im obigen Code nicht tun, der im Editor von stackoverflow abgeschnitten wurde), aber das hat nicht funktioniert. IntelliJ (16.3.3) hat sich nicht beschwert, aber JavaC (Java 8) hat sich über einen bereits definierten Bezeichner beschwert - es scheint, dass JavaC das ZWNJ-Zeichen tatsächlich als Teil eines Bezeichners zulässt, aber wenn Reflektion verwendet wird, um zu sehen, was es tut, das ZWNJ Zeichen werden von der Kennung entfernt - etwas, das Zeichen wie ‿ nicht sind.
quelle
Die Liste der Zeichen, die Sie in Ihren Bezeichnern verwenden können (und nicht nur am Anfang), macht viel mehr Spaß:
Die Liste lautet:
Es enthält die meisten Steuerzeichen! Ich meine Glocken und Scheiße! Sie können Ihren Quellcode zum Klingeln bringen! Oder verwenden Sie Zeichen, die nur manchmal angezeigt werden, z. B. den weichen Bindestrich.
quelle