Javaの大文字小文字ルール
予約語は小文字、クラス名は大文字始まり。この規則を破ったときに出るエラーを網羅します。
エラーメッセージの読み方
Main.java:1: error: class, interface, enum, or record expected
Main.java- ファイル名
1- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
class, interface, enum, or record expected- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 Public class Main { ^ 2 public static void main(String[] args) { 3 System.out.println("Hello"); 4 } 5 }
Main.java:1: error: class, interface, enum, or record expected
Javaの予約語はすべて小文字です。Publicは予約語ではなく、ただの識別子として扱われます。
直し方: Public を public にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public static void main(String[] args) { 3 system.out.println("Hello"); ^ 4 } 5 }
Main.java:3: error: package system does not exist
クラス名は大文字始まりです。小文字で書くとパッケージ名と解釈され、存在しないと報告されます。
直し方: system を System にします。
パターン3
1 public class Main { 2 public static void main(String[] args) { 3 string name = "Taiyo"; ^ 4 System.out.println(name); 5 } 6 }
Main.java:3: error: cannot find symbol
symbol: class string
Stringはクラスなので大文字始まりです。intやdoubleのような基本型だけが小文字です。
直し方: string を String にします。
パターン4
1 public class Main { 2 public static void main(String[] args) { 3 int n = 5; 4 If (n > 3) { ^ 5 System.out.println("big"); 6 } 7 } 8 }
Main.java:4: error: ';' expected
ifは予約語で全て小文字です。Ifと書くと予約語として認識されず、識別子と丸括弧の並びとして読まれ、文の終わりを期待されて構文エラーになります。
直し方: If を if にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 For (int i = 0; i < 3; i++) { ^ 4 System.out.println(i); 5 } 6 } 7 }
Main.java:3: error: '.class' expected
forも予約語なので小文字限定です。Forと書くと識別子として扱われ、直後の丸括弧の並びが型リテラルの記述と誤解釈され、一見forとは無関係に見えるエラーになります。
直し方: For を for にします。
よくある誤解
エディタで色が変わらないときは、予約語として認識されていない合図です。エラーを見る前に気づけます。
実務での勘所
予約語の小文字・クラス名の大文字始まりは、実は言語仕様が強制しているわけではなく大部分は命名規約です。class Foo {}をclass foo {}と書いてもコンパイルは通ります。ただし予約語(if, class, publicなど)を大文字にする、あるいは大文字化した予約語を識別子として使おうとするのは規約の話ではなく構文エラーになります。この違いを理解しておくと、「コンパイルは通るが規約違反」と「そもそも構文として成立しない」の切り分けが速くなります。