210

私はSCJPを読んでいて、この行について質問があります:

識別子は、文字、通貨文字 ($)、またはアンダースコア ( _ ) などの接続文字で始まる必要があります。識別子は数字で始めることはできません!

有効な識別子名はアンダースコアなどの接続文字で始めることができると述べています。アンダースコアが唯一の有効なオプションだと思いましたか? 他につながるキャラクターは?

4

7 に答える 7

270

接続キャラ一覧はこちら。これらは、単語を接続するために使用される文字です。

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 + " ");
}

版画

$ _¢£¤¥¥؋؋؋৳৳૱૱௹៛‿⁀⁀⁔₠₡₣₣₣₤₥₥₧₨₨₫₫₫₫₭₮₯ ﹩ $ _ ¢ £ ¥ ₩</p>

于 2012-08-02T08:59:03.307 に答える
25

65k 文字全体を反復処理し、尋ねるCharacter.isJavaIdentifierStart(c)。答えは : "undertie" 10 進数 8255

于 2012-08-02T08:57:36.420 に答える
7

正当な Java 識別子の最終的な仕様は、Java 言語仕様に記載されています。

于 2012-08-02T08:59:54.937 に答える
6

Unicode のコネクタ文字のリストを次に示します。キーボード上にはありません。

U+005F LOW LINE _
U+203F UNDERTIE ‿<br> U+2040 CHARACTER TIE ⁀
U+2054 Inverted Undertie ⁔<br> U+FE33 バーティカル ロー ラインのプレゼンテーション フォーム ︳<br> U+FE34 バーティカル ウェーブのプレゼンテーション フォームLOW LINE ︴<br> U+FE4D DASHED LOW LINE ﹍<br> U+FE4E センターライン LOW LINE ﹎<br> U+FE4F WAVY LOW LINE ﹏<br> U+FF3F 全幅 LOW LINE _

于 2012-08-02T08:59:37.713 に答える
4

接続文字は、2 つの文字を接続するために使用されます。

Java では、接続文字はCharacter.getType(int codePoint) / Character.getType(char ch)がCharacter.CONNECTOR_PUNCTUATIONと等しい値を返すものです。

Java では、文字情報は、 Connector_Punctuationのエイリアスである一般カテゴリ Pc を割り当てることによって接続文字を識別する Unicode 標準に基づいていることに注意してください。

次のコード スニペット、

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;

どうやら、上記の宣言は jdk1.7.0_80 および jdk1.8.0_51 で、次の 2 つの接続文字 (下位互換性...おっと!!!) のコンパイルに失敗するようです。

character: ・, codepoint: 12539, hexcode: 30fb
character: ・, codepoint: 65381, hexcode: ff65

とにかく、詳細はさておき、試験は Basic Latin character set のみに焦点を当てています。

また、Java の正当な識別子については、仕様が提供されています ここ. Character クラス API を使用して詳細を取得します。

于 2015-08-18T07:10:02.827 に答える
0

識別子の中で (最初だけではなく)使用できる文字のリストは、もっと楽しいものです。

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 ベルを鳴らすことができます! または、ソフト ハイフンなど、時々しか表示されない文字を使用します。

于 2016-06-02T19:45:48.610 に答える