Java プログラムを作成している時に、「シンボルを見つけられません」とエラーが表示された経験がある人もいるのではないでしょうか?このエラーは、変数やクラス、メソッドなどの名前が間違っている場合や、クラスを使用する時に必要なインポートがされていない時に発生します。
この記事では、「シンボルを見つけられません」というエラーが発生した時の対処法について解説していきます。
エラーが発生するコードの例
実際に「シンボルを見つけられません」のエラーが発生するコードを見てみましょう。
import が不足している時のエラー
次の例は、ArrayList クラスを使った処理であるであるが、importに java.util.* を指定していないため、コンパイルエラーになるコードです。
public class Main{
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("java");
list.add("ruby");
System.out.println(list);
}
}
上のコードを実行しようとすると、次のように「シンボルを見つけられません」のエラーが発生します。
Main.java:3: error: cannot find symbol
List<String> list = new ArrayList<String>();
^
このコンパイルエラーを修正する場合は、コードの先頭に import java.util.* を追加します。
import java.util.*;
public class Main{
public static void main(String[] args){
List<String> list = new ArrayList<String>();
~ 省略 ~
変数名が誤っている時のエラー
変数名の指定を誤り、宣言を行っていない変数を使用しようとした時も「シンボルを見つけられません」のエラーが発生します。
次の例は、String 型の変数を varName1 という名前で宣言していますが、次の行で誤って varName2 で変数名を参照しようとした時のコードです。
public class Main {
public static void main(String[] args){
String varName1 = "Hello Java";
System.out.println(varName2);
}
}
上のコードを実行しようとすると、次のように「シンボルを見つけられません」のエラーが発生します。
Main.java:6: error: cannot find symbol
System.out.println(varName2);
^
このコンパイルエラーを修正する方法は、もちろん変数名を varName1 に修正します。
System.out.println(varName2);
↓↓↓
System.out.println(varName1);
大文字小文字の違い
Java は大文字と小文字を区別するプログラミング言語です。
そのため、同じクラス名や変数名であっても大文字・小文字のスペルを間違えるだけでも別物となり「シンボルを見つけられません」のエラーが発生します。
次のコードを見てください。一見すると誤りがないように見えますが、3行目の StringBuilder の宣言の一部が小文字で stringBuilderとなっているため、「シンボルを見つけられません」のエラーが発生します。
public class Main {
public static void main(String[] args){
StringBuilder sb = new stringBuilder();
sb.append("Java");
sb.append("Ruby");
sb.append("Python");
System.out.println(sb.toString());
}
}
■ コンパイル結果
Main.java:9: error: cannot find symbol
StringBuilder sb = new stringBuilder();
^
このコンパイルエラーを修正する方法は、もちろん stringBuilderの先頭一文字目を大文字にしてStringBuilder sb = new stringBuilder();と修正します。
private メンバを参照しようとした時のエラー
こちらは「シンボルを見つけられません」とはエラーの内容が異なりますが、公開されていないメンバーにアクセスしようとした場合も、コンパイルエラーが発生します。
次の例は、MyClass クラスの private メンバに Main クラスからアクセスしているコードです。
class MyClass {
private static int calc(int x, int y) {
return x + y;
}
}
public class Main {
public static void main(String[] args){
MyClass.calc(1, 2);
}
}
上のコードを実行しようとすると、「MyClassでプライベートアクセスがあります」というコンパイルエラーが発生します。
Main.java:9: error: calc(int,int) has private access in MyClass
MyClass.calc(1, 2);
^
このコンパイルエラーを修正する方法は、MyClass クラスの calc メソッドを public スコープに変更するか、private スコープのメソッド呼び出しを削除する2つの修正方法があります。
外部ライブラリの参照エラー
外部の jar ファイルの参照パスの不備などにより、正常に jar ファイルが参照できていない時も「シンボルを見つけられません」のエラーが発生します。
「シンボルが見つかりません」が発生したら
ここまで「シンボルが見つかりません」のエラーが発生する原因について解説してきました。
このエラーが発生した時は、次のようなことをチェックしましょう。
- import が不足していないか確認
- 変数名やメソッド名に誤りがないか
- 大文字・小文字に間違いがないか
- 外部ライブラリの参照やビルドパスの設定に誤りがないか
まとめ
「シンボルが見つかりません」のエラーが発生する原因と対処法について解説してきました。
コンパイルエラーが発生した時に、素早くエラーを取り除くのもエンジニアとして重要なスキルですので、是非この記事を参考にエラーの対処を行なっていきましょう。
【関連記事】
▶【初心者向け】Javaのエラー解決方法と頻出エラー3選