Java での識別子の予期されるエラー
-
Java の
<identifier> expected
エラーを理解する - 例 1: メソッドのパラメーターにデータ型または名前がない場合
- 例 2: 式ステートメントが間違っている場合
- 例 3: 宣言ステートメントが間違っている場合
- まとめ
この記事では、Java の <identifier> expected
エラーについて学習します。
Java の <identifier> expected
エラーを理解する
<identifier> expected
は、初心者プログラマーが直面する最も一般的な Java コンパイル時エラーです。 このエラーは、メソッド パラメーターにデータ型または名前が宣言されていない場合、または式ステートメントがメソッド、コンストラクター、または初期化ブロックの外に記述されている場合に発生します。
Java では、識別子は 1つ以上の文字のシーケンスであり、最初の文字は文字または $
または _
である必要があり、その後の文字は文字、数字、$
または _
にすることができます。
これらの識別子は、変数、メソッド、クラス、パッケージ、インターフェースなどに名前を付けるために使用されます。
Java コードがコンパイルされるとき、最初のフェーズにはプログラムの字句解析が含まれます。 ここで、プログラムはトークンに分類され、識別子を含むすべてのトークンが一連の文法規則に対して検証されます。
そして、文法規則に従って、識別子が期待されているが、それが存在せず、その場所に他の何かが見つかった場合はいつでも、コンパイラは <identifier> expected
エラーを発生させます。 ここでの山かっこは、トークン オブジェクトへの参照を意味します。
よりよく理解するために、いくつかの例を見てみましょう。
例 1: メソッドのパラメーターにデータ型または名前がない場合
メソッド内のパラメーターには、データの後に識別子である変数名が続く必要があります。 これらのいずれかが欠けていると、必然的に <identifier> expected
エラーが発生します。
-
パラメータのデータが欠落している
public class Demo { public static int square(x) { return x * x; } public static void main(String[] args) { System.out.println(square(10)); } }
出力:
square.java:9: error: <identifier> expected public static int square(x) { ^ 1 error
上記のエラーを確認すると、変数
x
にデータ型がないことがわかります。 データ型を指定すると、適切に機能します。public class Demo { public static int square(int x) { return x * x; } public static void main(String[] args) { System.out.println(square(10)); } }
出力:
100
-
パラメータのデータ型は識別子です。 ここには変数名がありません。
public class Demo { public static int square(int) { return x * x; } public static void main(String[] args) { System.out.println(square(10)); } }
出力:
square.java:9: error: <identifier> expected public static int square(int) { ^ 1 error
上記のエラーを観察すると、データ型を指定したが、変数名を付けていないことがはっきりとわかります。
public class Demo { public static int square(int x) { return x * x; } public static void main(String[] args) { System.out.println(square(10)); } }
出力:
100
例 2: 式ステートメントが間違っている場合
メソッド、コンストラクター、または初期化ブロック <identifier> expected
の外に式ステートメントが記述されている場合、コンパイラーはエラーを発生させます。
コード例:
public class Demo {
private String name;
name = "Naruto";
System.out.println(name);
}
出力:
Demo.java:9: error: <identifier> expected
name = "Naruto";
^
Demo.java:10: error: <identifier> expected
System.out.println(name);
^
Demo.java:10: error: <identifier> expected
System.out.println(name);
^
3 errors
上記のエラーが発生した場合、ステートメントが関数またはコンストラクターで囲まれていないためにエラーが発生します。 print
という名前のメソッド内にこれらのステートメントを書きましょう。
public class Demo {
private String name;
public void print() {
name = "Naruto";
System.out.println(name);
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.print();
}
}
出力:
Naruto
例 3: 宣言ステートメントが間違っている場合
これはめったにありませんが、try-with-resources
ステートメントを使用する場合は前代未聞ではありません。 これらすべてのステートメントでは、try
キーワードの直後にクローズ可能なリソースを宣言する必要があります。
リソース変数が try-with-resources
ステートメントの外で宣言されている場合、コンパイラによって <identifier> expected
エラーが発生する可能性があります (コンパイラごとに異なる場合があります)。
コード例: ここでは、クローズ可能なリソースは BufferedReader
です。
import java.io.*;
public class Demo {
public static void main(String[] args) {
StringBuilder obj = new StringBuilder();
BufferedReader br = null;
try (br = new BufferedReader(new InputStreamReader(System.in))) {
String lines = "";
while (!(lines = br.readLine()).isBlank()) {
obj.append(lines);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力:
Demo.java:13: error: <identifier> expected
try (br = new BufferedReader(new InputStreamReader(System.in))) {
^
1 error
try
ブロック内で BufferedReader obj
を宣言すると、エラーは解決されます。
import java.io.*;
public class Demo {
public static void main(String[] args) {
StringBuilder obj = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String lines = "";
while (!(lines = br.readLine()).isBlank()) {
obj.append(lines);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
まとめ
この記事では、<identifier> expected
エラーがコンパイラによって発生した理由と、初心者が直面する最も一般的なコンパイル時エラーである理由について学びました。 また、このエラーが発生したケースを分析するさまざまな例も調べました。