web-dev-qa-db-ja.com

Javaクラス名の有効な文字

Javaクラス名で有効な文字は何ですか?他のルールが支配するものはJavaクラス名(たとえば、Javaクラス名前を数字で始めることはできません)?

68
Zach

ほとんどのUnicode文字を含む、ほぼすべての文字を使用できます!正確な定義は the Javaセクション3.8の言語仕様:識別子 にあります。

識別子は、Java文字Java数字の長さ無制限のシーケンスです、最初の文字はJava文字でなければなりません。 ...

Unicode文字セット全体から文字と数字が描画される場合があります。これにより、プログラマーは、ネイティブ言語で記述されたプログラムで識別子を使用できます。

識別子のスペル(Unicode文字シーケンス)をキーワード(§3.9)、ブールリテラル(§3.10.3)、またはヌルリテラル(§3.10.7)と同じにすることはできません。そうしないと、コンパイル時エラーが発生します。

ただし、それを行うべきかどうかは この質問 を参照してください。

56
Jason Cohen

すべてのプログラミング言語には、使用が許可されている名前の種類に関する独自のルールと規則があり、Javaプログラミング言語も同じです。変数の命名規則と規則次のように要約できます。

  • 変数名では大文字と小文字が区別されます。変数の名前は、文字、ドル記号「$」、またはアンダースコア文字「_」で始まるUnicode文字と数字の無制限のシーケンスである任意の有効な識別子です。ただし、慣例では、変数名は常に「$」や「_」ではなく、文字で始まります。また、慣例により、ドル記号はまったく使用されません。自動生成された名前にドル記号が含まれる場合がありますが、変数名では常に使用しないでください。アンダースコア文字にも同様の規則があります。変数の名前を「_」で始めることは技術的には合法ですが、この方法はお勧めしません。空白は許可されていません。

  • 後続の文字は、文字、数字、ドル記号、またはアンダースコア文字です。規則(および常識)もこの規則に適用されます。変数の名前を選択するときは、わかりにくい略語の代わりに完全な単語を使用してください。そうすることで、コードが読みやすく、理解しやすくなります。多くの場合、コードは自己文書化されます。たとえば、cadence、speed、gearという名前のフィールドは、s、c、gなどの短縮バージョンよりもはるかに直感的です。また、選択する名前はキーワードまたは予約語であってはならないことに注意してください。

  • 選択した名前が1つのWordのみで構成されている場合、そのWordをすべて小文字で綴ります。複数のWordで構成されている場合、後続の各Wordの最初の文字を大文字にします。 gearRatioおよびcurrentGearという名前は、この規則の代表的な例です。変数にstatic final int NUM_GEARS = 6などの定数値が格納されている場合、規則はわずかに変わり、すべての文字を大文字にし、後続の単語をアンダースコア文字で区切ります。慣例により、アンダースコア文字は他の場所で使用されることはありません。

公式Javaチュートリアル から。

16
Ivan Bosnic

以前の回答に加えて、次のことに注意する価値があります。

  1. Javaでは、シンボル名にUnicode通貨記号を使用できるため、次のすべてが機能します。

$ var1£var2€var3

通貨記号の使用は、コンパイラによってコードに追加される変数が従来「$」で始まっていたC/C++に由来すると考えています。 Javaの明白な例は、内部クラスの '.class'ファイルの名前で、慣例により 'Outer $ Inner.class'の形式になっています。

  1. 多くのC#およびC++プログラマーは、インターフェイス(C++の純粋仮想クラス)の前に「I」を配置する規則を採用しています。これは、Javaでは必須ではなく、したがって行われません。implementsキーワードは、何かがインターフェースである場合に非常に明確にするためです。

比較する:

class Employee:パブリックIPayable // C++

class Employee:IPayable // C#

そして

クラスEmployeeはPayable // Javaを実装します

  1. 多くのプロジェクトでは、フィールド名の前にアンダースコアを配置する規則を使用しているため、ローカル変数やパラメーターと簡単に区別できます。

private double _salary;

小さな少数派は、アンダースコアをフィールド名の後に置きます。

private double salary_;

10
Garth Gilmour

Jason Cohenがすでに述べたように、Java Language Specificationは、セクション3.8で有効な識別子を定義しています。

「識別子は、Java文字とJava数字。最初の文字はJava = letter。[...]「Java letter」は、Character.isJavaIdentifierStart(int)メソッドがtrueを返す文字です「Java letter-or-digit」は、Character.isJavaIdentifierPart(intメソッドが)はtrueを返します。」

これで2番目の質問に答えることができます。最初の質問について。私は教師と(覚えている限り)JavaコンパイラーにJavaクラス名は大文字のAZですが、これに関する信頼できるソースは見つかりませんOpenJDKで試してみると、小文字または$記号でクラス名を開始するときに警告はありません。ただし、bashシェルからコンパイルする場合はエスケープする必要があります。

4
EriF89

有効な通貨文字はすべて、Javaの識別子に対して有効であるというbosnicの答えに加えたいと思います。これは合法的な識別子であり、これも同様です。しかし、彼または彼女の回答を編集する方法がわからないため、この些細な追加を投稿せざるを得ません。

2
MetroidFan2002

Javaクラス名(たとえば、Javaクラス名は数字で始めることはできません)?

  • Javaクラス名は通常、大文字で始まります。
  • Javaクラス名は数字で始めることはできません。
  • 「MyClassName」などのクラス名に複数の単語がある場合、各単語は大文字で始まる必要があります。例:「MyClassName」。この命名規則は、CamelCase Typeに基づいています。
1
Deepak Kumar

クラス名はUpperCamelCaseの名詞で、すべてのWordの最初の文字を大文字にします。単語全体を使用する-頭字語や略語を避けます(略語がURLやHTMLなどの長い形式よりもはるかに広く使用されている場合を除く)。命名規則はここで読むことができます:

http://www.Oracle.com/technetwork/Java/codeconventions-135099.html

0
Sachin Tiwari

識別子は、クラス名、メソッド名、変数名に使用されます。識別子は、大文字と小文字、数字、またはアンダースコアとドル記号の任意の説明的なシーケンスです。数字で始まらないようにしてください。数字リテラルと混同しないようにしてください。繰り返しますが、Javaは大文字と小文字が区別されるため、VALUEはValueとは異なる識別子です。有効な識別子の例を次に示します。

AvgTemp、カウントa4、$ test、this_is_ok

無効な変数名は次のとおりです。

2カウント、高温、Not/ok

0
navneet kumar