私はSCJPを読んでいますが、この行に関して質問があります:
識別子は、文字、通貨文字($)、またはアンダースコア(_)などの接続文字で始まる必要があります。識別子を数字で始めることはできません!
有効な識別子名は、接続文字などアンダースコアで始まることができると述べています。アンダースコアが唯一の有効なオプションだと思いましたか?他に接続文字がありますか?
接続文字のリストは次のとおりです。これらは単語を接続するために使用される文字です。
http://www.fileformat.info/info/unicode/category/Pc/list.htm
U+005F _ LOW LINE
U+203F ‿ UNDERTIE
U+2040 ⁀ CHARACTER TIE
U+2054 ⁔ INVERTED UNDERTIE
U+FE33 ︳ PRESENTATION FORM FOR VERTICAL LOW LINE
U+FE34 ︴ PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
U+FE4D ﹍ DASHED LOW LINE
U+FE4E ﹎ CENTRELINE LOW LINE
U+FE4F ﹏ WAVY LOW LINE
U+FF3F _ FULLWIDTH LOW LINE
これはJava 7でコンパイルします。
int _, ‿, ⁀, ⁔, ︳, ︴, ﹍, ﹎, ﹏, _;
例。この場合、tp
は、列の名前と特定の行の値です。
Column<Double> ︴tp︴ = table.getColumn("tp", double.class);
double tp = row.getDouble(︴tp︴);
以下
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
if (Character.isJavaIdentifierStart(i) && !Character.isAlphabetic(i))
System.out.print((char) i + " ");
}
プリント
$ _¢£¤¥؋৲৳৻૱௹฿៛‿⁀⁔₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₱₱₹₳₴₵₷₸₹﹎﹏﹏︳︴﹍﹎﹏ $ $ _ ¢ £ £ ¥ ₩
65k文字全体を反復処理し、Character.isJavaIdentifierStart(c)
に問い合わせます。答えは次のとおりです。「undertie」decimal 8255
正当なJava識別子の決定的な仕様は、 Java言語仕様 にあります。
ここにリストがあります Unicodeのコネクタ文字。キーボードにはありません。
U + 005Fローライン_
U + 203F UNDERTIE‿
U + 2040キャラクタータイ⁀
U + 2054 INVERTED UNDERTIE⁔
U + FE33垂直低線用のプレゼンテーションフォーム︳
U + FE34垂直波状ローラインのプレゼンテーションフォーム︴
U + FE4D破線ローライン﹍
U + FE4E CENTRELINE LOW LINE﹎
U + FE4F WAVY LOW LINE﹏
U + FF3F全幅ローライン_
接続文字は、2つの文字を接続するために使用されます。
Javaでは、接続文字は Character.getType(int codePoint) / Character.getType(char ch) が Character .CONNECTOR_PUNCTUATION 。
Javaでは、文字情報はUnicode標準に基づいていることに注意してください。これは、接続文字に Connector_Punctuation のエイリアスである一般カテゴリPcを割り当てることで接続文字を識別します。
次のコードスニペット、
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
if (Character.getType(i) == Character.CONNECTOR_PUNCTUATION
&& Character.isJavaIdentifierStart(i)) {
System.out.println("character: " + String.valueOf(Character.toChars(i))
+ ", codepoint: " + i + ", hexcode: " + Integer.toHexString(i));
}
}
jdk1.6.0_45で識別子を開始するために使用できる接続文字を出力します
character: _, codepoint: 95, hexcode: 5f
character: ‿, codepoint: 8255, hexcode: 203f
character: ⁀, codepoint: 8256, hexcode: 2040
character: ⁔, codepoint: 8276, hexcode: 2054
character: ・, codepoint: 12539, hexcode: 30fb
character: ︳, codepoint: 65075, hexcode: fe33
character: ︴, codepoint: 65076, hexcode: fe34
character: ﹍, codepoint: 65101, hexcode: fe4d
character: ﹎, codepoint: 65102, hexcode: fe4e
character: ﹏, codepoint: 65103, hexcode: fe4f
character: _, codepoint: 65343, hexcode: ff3f
character: ・, codepoint: 65381, hexcode: ff65
以下はjdk1.6.0_45でコンパイルします。
int _, ‿, ⁀, ⁔, ・, ︳, ︴, ﹍, ﹎, ﹏, _, ・ = 0;
どうやら、上記の宣言は、次の2つの接続文字(下位互換性...おっと!!!)のjdk1.7.0_80およびjdk1.8.0_51でのコンパイルに失敗したようです。
character: ・, codepoint: 12539, hexcode: 30fb
character: ・, codepoint: 65381, hexcode: ff65
とにかく、詳細はさておき、基本的なラテン文字セットのみに焦点を当てています。
また、Javaの法的識別子については、仕様が提供されます here 。 CharacterクラスAPIを使用して、詳細を取得します。
Java識別子で許可される最も楽しい文字の1つ(ただし、開始時ではありません)は、「ゼロ幅非結合」という名前のUnicode文字です(&zwnj;、U + 200C、 https://en.wikipedia.org/wiki/Zero-width_non-joiner )。
これは、XMLの別の部分への参照を保持している属性値内のXMLの部分に一度ありました。 ZWNJは「ゼロ幅」であるため、見ることができません(カーソルと一緒に歩いている場合を除き、前のキャラクターのすぐ上に表示されます)。また、ログファイルおよび/またはコンソール出力で見ることができませんでした。しかし、それは常に存在していました。コピーして検索フィールドに貼り付けて取得したため、参照された位置が見つかりませんでした。ただし、検索フィールドに文字列(の一部)を入力すると、参照位置が見つかりました。これを理解するためにしばらく時間がかかりました。
Zero-Width-Non-Joinerを入力するのは、少なくともドイツ語版でヨーロッパのキーボードレイアウトを使用する場合、実際には非常に簡単です(非常に簡単です)。 "Europatastatur 2.02"-AltGr + "。"で到達可能です。2つのキーは、残念ながらほとんどのキーボードで互いに直接隣り合って配置されており、偶然に簡単にヒットする可能性があります。
Javaに戻る:よく考えて、次のようなコードを書くことができます。
void foo() {
int i = 1;
int i = 2;
}
2番目のiにはゼロ幅の非ジョイナーが追加されます(上記のコードではstackoverflowのエディターで切り取られていません)が、機能しませんでした。 IntelliJ(16.3.3)は文句を言いませんでしたが、JavaC(Java 8)はすでに定義された識別子について文句を言いました-JavaCは実際に識別子の一部としてZWNJ文字を許可しているようですが、リフレクションを使用してそれが何をするかを見ると、ZWNJ文字は識別子から取り除かれます-likeのような文字はそうではありません。
使用できる文字のリストinside(開始時ではなく)識別子はmuchより楽しいです:
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
if (Character.isJavaIdentifierPart(i) && !Character.isAlphabetic(i))
System.out.print((char) i + " ");
リストは次のとおりです。
I wanted to post the output, but it's forbidden by the SO spam filter. That's how fun it is!
ほとんどの制御文字が含まれています!ベルとたわごとを意味する!ソースコードにfnのベルを鳴らすことができます!または、ソフトハイフンなど、時々しか表示されない文字を使用します。