1. ホーム
  2. ジャワ

49のよくあるJavaのエラーとその回避方法!

2022-02-21 13:57:50

学ぶ ジャワ を開発している学生。 Java のソフトウェアは、多くの種類のエラーに遭遇する可能性がありますが、そのほとんどは回避することができます。このため、最も一般的なJavaのコーディングエラー49個をリストアップし、コード例とチュートリアルで、一般的なコーディングの問題を解決するのに役立つようにしています。

コンパイラのエラー

<ブロッククオート

javaを学ぶ学生には、グループをお勧めします。638855753、グループ管理は、学習ビデオを受け取ることができます見つけます。グループはまた、随時、学習教材を共有します。大男と小男の両方が歓迎されています

Javaソフトウェアのコードをコンパイラで実行すると、コンパイラのエラーメッセージが作成されます。コンパイラは、1つのエラーに対して多くのエラーメッセージを投げる可能性があることに留意してください。ですから、最初のエラーを修正して、再コンパイルする必要があります。そうすることで、多くの問題を解決することができます。

1. "...Expected"。

このエラーは、コードに何かが欠けているときに発生します。これは通常、セミコロンや右括弧の欠落が原因です。

private static double volume(String solidom, double alturam, double areaBasem, double raiom) {double vol; if (solidom.equalsIgnoreCase(" esfera")) {vol=(4.0/3)*Math.pi*Math.PI*Matrix. pow(raiom,3);} else { if (solidom.equalsIgnoreCase("cilindro") {vol=Math.pi*Math.pow( raiom,2)*alturam;} else {vol=(1.0/3)*Math.pi*Math.pow(raiom,2)*alturam;}} return vol;} { if (solidom.equalsIgnoreCase("cilindro") {vol=(1.0/3)*Math.pi*Math.pow(raiom,3)*alturam)

通常、このエラーメッセージは問題の正確な場所を特定するものではありません。エラーを発見するためには

私はまた、6年間javaの開発に従事してきたフルスタックエンジニアであり、18年間の学習のため、より適したjava乾物をコンパイルするためにほぼ1ヶ月を費やして、すべてのjavaバディに
QQグループを追加します。818464711 (募集中)

  • すべての左括弧に対応する右括弧があることを確認する。

  • Javaコードの指示行を見る前に、一応その行を見てください。このJavaソフトウェアのエラーは、コードの深いところを見ないとコンパイラが気づかないのです。

  • 左括弧のような文字は、Javaコードの本来の位置には配置されないことになっていることがあります。そこで開発者は、括弧のバランスをとるために右括弧を配置しなかった。

クリックすると、間違った括弧がエラーの原因となる例(@StackOverflow)を見ることができます。

2. "閉じない文字列リテラル"

文字列リテラルの末尾が引用符で囲まれていない場合、"Unclosed String Literal"というエラーメッセージが作成され、エラーと同じ行にそのメッセージが表示されます。(@DreamInCode) Literalは、値のソースコードです。

public abstract class NFLPlayersReference { private static Runningback[] nflplayersreference; private static Quarterback[] players; private static WideReceiver[] nflplayers; public static void main(String args[]){Runningback r = new Runningback("Thomlinsion");Quarterback q = new Quarterback(".NFL Player) { private static static Quartner[] players; private static Quarterback[] players; public static Quartner[] players Tom Brady");WideReceiver w = new WideReceiver("Steve Smith");NFLPlayersReference[] NFLPlayersReference;Run();// {NFLPlayersReference = new NFLPlayersReference [3];nflplayerreference[0] = r;players[1] = q;nflplayer[2] = w; for ( int i = 0; i < nflplayersreference. length; i++ ) {System.out.println("My name is " + " nflplayersreference[i].getName()); nflplayersreference[i].run(); nflplayersreference[i].run(); System.out.println("NFL offense threats have great running abilities! "); } {Nflplayersreference[ii];nflplayersreference[ii];Nflplayersreference[ii];Nflplayersreference[ii]; Nflplayer[i].run(); Nflplayerreference.i].run() } private static void Run() { System.out.println("Not yet implemented"); }.

通常は このような場合に起こります。

  • 文字列の末尾が引用符で囲まれていない。これは、必要な引用符を追加して文字列テキストを閉じると簡単に修正できます。

  • 文字列が1行を超える。長い文字列リテラルは、プラス記号("+")で文字列リテラルに分割することができます。

  • 文字列リテラルの一部である引用符は、バックスラッシュ("")でエスケープされません。

Javaソフトウェアのエラーメッセージ「Unclosed String Literal」についての解説を読むにはクリックしてください。(@Quora)

3. "式の不正な開始"

Illegal Start of an Expression"エラーは、さまざまな理由で発生する可能性があります。そのため、あまり役に立たないエラーメッセージの1つです。開発者の中には、不正なコードが原因だと考える人もいます。

通常、式は新しい値を生成したり、変数に値を代入したりするために作成されます。コンパイラは式を見つけることを期待しますが、構文が期待と一致しないため、見つけることができません。(@StackOverflow) このエラーは、これらのステートメントで見つけることができます。

} // ここに追加public void newShape(String shape) { switch (shape) { case "Line":Shape line = new Line(startX, startY, endX, endY); shapes.add(line); break; case "Oval":Shape oval = new Oval(startX, startY, endX, endY); shapes.add(oval); break; case "Rectangle".Line(startX);shape (shape); case "Line":Shape line = new Line(startX);shape (endX); shapes.add(long); break; // ここに追加! Shape rectangle = new Rectangle(startX, startY, endX, endY);shapes.add(rectangle); break; default:System.out.println("ERROR. Check logic .");}} {}.矩形(Shape rectangle = new Rectangle(startX, startY, endX, endY);shapes.add(rectangle);break; }}. // ここから削除してください}。

Illegal Start of an Expression"エラーのトラブルシューティングについては、こちらをご覧ください。(@StackOverflow)

4. "記号が見つからない"

これは非常によくある問題で、Javaのすべての識別子は、使用する前に宣言する必要があるからです。このエラーは、コードがコンパイルされるときに、コンパイラが識別子の意味を理解していないために発生します。

シンボルが見つかりません」というメッセージが表示される理由はさまざまです。

  • 識別子のスペルは、宣言されたときとコードで使用されるときとで異なる場合があります。

  • 変数が宣言されていない。

  • 変数が使用時に宣言と同じスコープにない。

  • クラスがインポートされていない。

Cannot Find Symbol"エラーの詳細と、この問題を発生させたコード例を読むには、ここをクリックしてください。(@StackOverflow)

5. "パブリッククラスXXXは、ファイル"にあるべきである。

Public Class XXX Should Be in File"は、XXXクラスとJavaプログラムファイル名が一致しない場合に表示されます。クラスとJavaファイルが同じである場合にのみ、コードはコンパイルされます。(@coderanch)さんからの情報です。

package javaapplication3;public class Robot { int xlocation; int ylocation; String name; static int ccount = 0; public Robot(int xxlocation, int yylocation, String nname) { xlocation = xxlocation; ylocation = yylocation; name = nname; ccount++; }} public class JavaApplication1 {public static void main(String[] args) { robot firstRobot = new Robot(34,51,"yossi"); System.Net Framework 2.0; public class javaApplication3 {public static void main(String[] args) { robot firstRobot (34,51,"yossi"); System.Net Framework 2.0; public class javaApplication3 {public static void main(Str. out.println("numebr of robots is now " + Robot.ccount); }}.

この問題を解決するには

  • クラスとファイルが同じ名前になっている。

  • 2つの名前が同じであることを確認する。

Public Class XXX Should Be in File"エラーの例をクリックしてください。(@StackOverflow)

6. "互換性のない型"

Incompatible Types"は、指定された文が変数と型式を組み合わせようとしたときに発生する論理エラーです。通常、テキスト文字列を整数型に、またはその逆を行おうとしたときに発生します。これは、Javaの構文エラーではありません。(@StackOverflow)

test.java:78: error: incompatible typesreturn stringBuilder.toString();^required: intfound.Test.java:78:エラー: 互換性のない型です。文字列1エラー

コンパイラが "Incompatible Types" というメッセージを出した場合、簡単には修正できません。

  • 型変換ができる関数がある。

  • 開発者は、コードの期待される機能を変更する必要があるかもしれません。

この例では、文字列を整数に代入しようとすると、"Incompatible Types"というメッセージが表示されます。(@StackOverflow)

7. "無効なメソッド宣言です。

このJavaソフトウェアのエラーメッセージは、メソッドの戻り値の型がメソッド署名で明示的に宣言されていないことを示します。

public class Circle{ private double radius; public CircleR(double r) {radius = r;} public diameter() { double d = radius * 2; return d;}}.

Invalid Method Declaration; Return Type Required"エラーを引き起こすには、いくつかの方法があります。

  • 型の宣言を忘れた

  • メソッドに戻り値がない場合、メソッドのシグネチャで型として "void" を宣言する必要があります。

  • コンストラクタ名は型宣言をする必要がありません。ただし、コンストラクタ名に誤りがある場合、コンパイラはそのコンストラクタを型が指定されていないメソッドとして扱います。

コンストラクタの命名が、どのように "無効なメソッド宣言; 返り値が必要" 問題を引き起こすか、この例をご覧ください。(@StackOverflow)

8.メソッド <X> in クラス <Y> Cannot Be Applied to Given Types".メソッド <X> in クラス <Y> Cannot Be Applied to Given Types"。

このJavaソフトウェアのエラーメッセージは、より有用なエラーメッセージの1つです。これは、メソッドシグネチャが間違ったパラメータを呼び出していることを宣言的に示しています。

RandomNumbers.java:9: error: generateNumbers in class RandomNumbers cannot be applied to given types;generateNumbers();required: int[] found: generateNumbers();reason: actual and formal argument lists different in length

呼び出されたメソッドは、メソッド宣言で定義された引数のいくつかを予期しています。メソッド宣言を確認し、互換性があることを確認した上で、慎重に呼び出してください。

Javaソフトウェアのエラーメッセージが、メソッド宣言とメソッド呼び出しのパラメータによって生じる非互換性をどのように識別するかを説明する、このディスカッションをチェックしてください。(@StackOverflow)

9.リターンステートメントがありません。

Missing Return Statement" は、メソッドに return ステートメントがない場合に表示されるメッセージです。void 型以外の)値を返すすべてのメソッドには、メソッドの外部で呼び出すために、文字通りその値を返すステートメントが必要です。

public String[] OpenFile() throws IOException { Map<String, Double> map = new HashMap(); FileReader fr = new FileReader("money.txt" ;); BufferedReader br = new BufferedReader(fr); try{ while (br.); try{ while (br.); try{ (br.); try{ (br.); try{ (wr. ready()){ String str = br.readLine(); String[] list = str.split(" "); System.out.println(list); }} catch (IOException e){ System.err.println("Error - IOException!");}} { IOExceptionは、IOE(Intelligence)の略です。

コンパイラが "Missing Return Statement" というメッセージを投げる理由はいくつかあります。

  • エラーにより return 文が省略された。

  • このメソッドは値を返しませんが、メソッドのシグネチャで void 型が未宣言です。

Java ソフトウェアのバグ "Missing Return Statement" を修正する方法の例を参照してください。(@StackOverflow)

10. "精度の損失の可能性"

Possible Loss of Precision"メッセージは、変数に許容量以上の情報が代入された場合に発生します。このような場合、フラグメントは破棄されます。もしこれが問題でないなら、コードは明示的に変数を新しい型として宣言する必要があります。

Possible Loss of Precision"エラーは通常、次のような場合に発生します。

  • 整数データ型の変数に実数を代入しようとした。

  • 整数データ型の変数にdoubleを代入しようとしました。

Javaにおける基本的なデータ型の説明で、データの特性を表現しています。(@Oracle)

11.解析中にファイルの末尾に到達した"

このエラーメッセージは、Javaのコードで、プログラム中に閉じ中括弧("}")がない場合に発生します。コードの末尾に中括弧を付けることで、すぐにエラーを修正できることもあります。

public class mod_MyMod extends BaseModpublic String Version(){ return "1.2_02";}public void AddRecipes(CraftingManager recipes){ recipes.addRecipe(new ItemStack(Item.diamond), new Object[] { "#"、 Character.valueOf('#'), Block.dirt});}.

上記のコードでは、以下のようなエラーになります。

java:11: 解析中にファイルの最後に到達しました }.

ユーティリティプログラムを作成し、コードのインデントを適切に行うことで、このような中括弧の欠落を簡単に発見することができます。

この例では、中括弧がないために "Reached End of File While Parsing" というエラーメッセージが発生することを説明しています。(@StackOverflow)

12. "到達不能なステートメント"。

Unreachable statement"エラーは、ステートメントが実行できない場所に記述されている場合に発生します。通常、break文やreturn文の後に発生します。

for(;;){ break;... // 到達不能文}int i=1;if(i==1)... ...else...etc...。// デッドコード

returnステートメントを移動するだけで、エラーが修正されることがよくあります。Unreachable StatementのJavaソフトウェアエラーを修正する方法についてのディスカッションをお読みください。(@StackOverflow)

13.変数 <X> が初期化されていない可能性があります"

このエラーは、メソッド内で宣言されたローカル変数が初期化されていない場合に発生します。また、初期値のない変数がif文の一部である場合にも発生します。

int x;if (condition) {x = 5;}System.out.println(x); // x が初期化されていない可能性があります。

このディスカッションでは、quot;変数 <X> Might Have Not Been Initialized" エラーのトリガーを回避する方法について説明します。(@reddit)

14. "演算子 ... は <X>" に適用できません。

この問題は、定義にない型に対して演算子を使用した場合に発生します。

演算子 < は java.lang.Object,java.lang.Object に適用できません。

これは通常、Javaコードが計算で型文字列を使用しようとしたときに起こります。これを解決するには、文字列を整数型または浮動小数点型に変換する必要があります。

非数値的な型が、演算子を適用しないように警告するJavaソフトウェアエラーを引き起こす例については、こちらをお読みください。(@StackOverflow)

15.変換できない型"

Javaコードが不正な変換を行おうとすると、"Inconvertible Types"エラーが発生します。

TypeInvocationConversionTest.java:12: inconvertible typesfound : java.util.ArrayList<java.lang.Class<? extends TypeInvocationConversionTest.Interface1>>required: java.util.ArrayList<java.lang.Class<? >> lessRestrictiveClassList = (ArrayList<Class<? &g;>) classList.ArrayList.Class<?>>&g;>>) classList;

例えば、boolean 値を整数に変換することはできません。

Javaソフトウェアで変換不可能な型を変換する方法については、こちらのディスカッションをお読みください。(@StackOverflow)

16.戻り値の欠落"

return文に不正な型が含まれている場合、"Missing Return Value"というメッセージが表示されます。例えば、次のようなコードです。

public class SavingsAcc2 { private double balance; private double interest; public SavingsAcc2() {balance = 0.0;interest = 6. 17;} public SavingsAcc2 (double initBalance, double interested) {balance = initBalance;interest = interested;} public SavingsAcc2 deposit(double amount) {balance = balance + amount; return;} public SavingsAcc2 withdraw(double amount) {balance = balance - amount; return;} public SavingsAcc2 addInterest(double interest) {balance = balance * (interest / 100) + balance; return;} public double getBalance() { return balance;}} { double double addBalance(double interest) { return balance; }} public SavingsAcc2 (double install) { balance = balance + amount; return;} } public SavingsAcc2 (double initBalance, double interested) { balance = balance + interest; return

以下のエラーを返します。

SavingsAcc2.java:29: missing return value return;^SavingsAcc2.java:35: missing return value return;^SavingsAcc2.java:41: missing return value return;^3 エラー