エラーの種類 エラーメッセージとその対応
☆ エラー種類
・「";"がありません」
原因 セミコロンと似ている文字を入力している可能性あり
解決策 :(コロン)やi(小文字のアイ)を入力していないか確認。また、誤って全角文字の;になってないかも確認する
・「構想解析中にファイルの終わりに移りました」
原因 ソースコード内で{ }の対応がとれてない(閉じ忘れ)
解決策 波かっこの対応を再度確認して修正する
・「class.interface、またはenumがありません。」
原因 ソースコード内でブロックの{ }の対応がとれてない(閉じすぎ)
解決策 波かっこの対応を再度確認して修正する
・「〈identifier〉がありません。」
原因 ソースコード内でpublicやstaticなどのキーワードのタイプミス
または、現在のバージョンのJDKでは利用出来ないキーワード、構文を利用している場合に発生
解決策 ① エラーが指摘されている箇所でタイプミスをしていないか確認
② もし問題ない場合、現在利用中のJDKで利用出来る構文であることを確認
・ 「¥12288は不正な文字です。」
原因 ソースコード内に全角スペースの文字が含まれている
ex. インデントにタブや全角スペース文字が含まれている可能性もあり
public…
ここ → public…
※ Webサイトなどからサンプルコードをコピー&ペーストした場合に混入することもあるので注意
¥12288….全角スペース
¥65307….全角 ;
¥65373….全角 }
¥65289…..全角 )
¥8221……全角 ”
・「シンボルが見つけられません。」
「~を~に解決できません。」
原因
①存在しないクラス名・型名・変数名・メソッド名・フィールド名などを利用している
ex String型を指定したい string(先頭を大文字ではなく小文字にしてしまっている)
変数name namae(スペルが間違っている)
② importしていないクラスを利用しようとした場合
ex java.util.ArrayListをimport文で宣言していないにも関わらず、
コードの中には「ArrayList a=new ArrayList( );」がある
→クラスが見つからないのでエラーになる
解決策 このエラーメッセージの次の行には
見つけられなかったシンボルが何であるかという情報が隠されている
ex シンボル:クラスString
① このシンボル名を確認し、
ソースコード中で確かに存在するクラス・型・フィールド・メソッド・変数を指定しているか確認する
②もしクラス名の場合はimportを忘れていないかを確認
・ 「変数は初期化されていない可能性があります。」(その1)
原因 値をまだ一度も代入していない変数を計算や画面出力に利用しようとした
ex int a;
System.out.println(a); ←aの値代入し忘れ
解決策 エラーで報告された変数に値を代入する
未然に防ぐために変数は極力必要になった時に随時宣言する
(宣言と同時に初期値を代入する)
・ 「変数は初期化されていない可能性があります。」(その2)
…..final修飾されたフィールドを持つクラスをコンパイルするとこのメッセージが表示される
原因 final修飾されたフィールドはインスタンス化が完了するまでの間に中身の値が確定しないといけない
(final修飾された値は永久に固定だから)
また、何も代入されてないfinalフィールドが存在しうる場合に発生する
(確実に値を代入しないといけないため。finalがつくと他のメソッド操作などから値を代入することはできないから)
解決策 finalフィールド宣言時には、
「final int a=10;」のように、すぐに初期値を代入する
または、コンストラクタ(自動初期値)内でaの値が確実に代入されるようにする
「staticでないメソッド~をstaticコンテキストから参照することは出来ません」
「非staticメソッド~をstatic参照出来ません」
原因 mainメソッドは静的メソッド(static)なので、静的メソッドの制約により、
同じくstaticで宣言されているメンバしか利用できない
よって、mainメソッドからstaticでないメソッドを呼び出そうとするとエラーとなる
解決策 mainメソッドから呼び出そうとしているメソッドがstaticで修飾されているか確認
もしされていなければ
① メソッドをstaticで修飾する
(これはクラスにメソッドがくっつく状態になるので、インスタンス化しなくてもメソッドが動く)
② 呼び出し先メソッドを含むクラスをインスタンス化した上でメソッドを呼び出す
・ 「クラス~はpublicであり、ファイル~で宣言しなければなりません」
「public型~はそれ独自のファイル内に定義されなければなりません」
原因 publicなクラスAを定義するファイル名は、A.javaである必要がある
それ以外のクラス名を指定するとエラーになる
解決策 クラス名.javaにクラス名を修正