dポイントプレゼントキャンペーン実施中!

enum Ok{A,A,月1,月1,_,?}
enum Ng{1月,1月,→,!,☆}
public class Main{public static void main(String[] args){
System.out.println("あああああ");
}}//終わり

このJavaプログラムはエラーになります。何故ですか?

要するに、enumに使える列挙子の法則性に興味があります。「?」は通って「!」はエラーって、コンパイルを試みた後に結果を知ると、色々とムカつきます。 「!」は通って「?」はエラーだと嘘が書物に書いてあると、騙されます。

enumで使える列挙子(要素)のタイプが載ってるサイト、enumの列挙子に使うとエラーになってしまう例が載ってるサイトなどを紹介してくれるとありがたいです。

どんな文字列でもenumに使えて、何でもOKなら親切だと思うのに・・・

A 回答 (3件)

Javaで識別子(クラス名や列挙子名や変数名など)に使える文字は、Java文字とJava数字であり、先頭に限ってはJava文字のみとなっています。


http://docs.oracle.com/javase/specs/jls/se7/html …

先頭にも使える文字(Java文字)かどうかは java.lang.Character.isJavaIdentifierStart(char) で調べられます。
http://docs.oracle.com/javase/jp/7/api/java/lang …

先頭以外には使える文字(Java文字またはJava数字)かどうかは java.lang.Character.isJavaIdentifierPart(char) で調べられます。
http://docs.oracle.com/javase/jp/7/api/java/lang …


例えば、下記の様なコードを実行する事で判別する事が出来るでしょう。

System.out.println(Character.isJavaIdentifierPart('?'));
System.out.println(Character.isJavaIdentifierPart('→'));
System.out.println(Character.isJavaIdentifierStart('!'));// 先頭に使えるか
System.out.println(Character.isJavaIdentifierStart('☆'));// 先頭に使えるか

参考URL:http://www.y-adagio.com/public/standards/tr_java …
    • good
    • 0
この回答へのお礼

さんきゅー

お礼日時:2013/09/15 16:53

1月の1が通りません。


識別子について調べるといいです。

予約語と識別子は、プログラムで最初に抑えるべき基本です。
    • good
    • 0

ちなみにどんなエラーになったんでしょうか?

この回答への補足

javac Main.java
Main.java:2: エラー: \65297は不正な文字です
enum Ng{1月,1月,→,!,☆}
^
Main.java:2: エラー: '}'がありません
enum Ng{1月,1月,→,!,☆}
^
Main.java:2: エラー: \8594は不正な文字です
enum Ng{1月,1月,→,!,☆}
^
Main.java:2: エラー: \65281は不正な文字です
enum Ng{1月,1月,→,!,☆}
^
Main.java:2: エラー: \9734は不正な文字です
enum Ng{1月,1月,→,!,☆}
^
エラー5個

補足日時:2013/08/31 09:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!