16

JavaでNoSuchMethodExceptionとの正確な違いを見つけることができません。NoSuchMethodError誰かがこれら2つのことの説明と例を挙げてもらえますか?

4

4 に答える 4

26

NoSuchMethodException は、リフレクションを通じてメソッドを呼び出すときにスローされる可能性があり、メソッドの名前はプログラム内の変数に由来します。

NoSuchMethodError は、コンパイルされた Java クラスが別のクラスに対して通常のメソッド呼び出しを行い、そのメソッドが存在しない場合にスローされる可能性があります。(これは通常、呼び出されているクラスの 1 つのバージョンに対して呼び出し側クラスがコンパイルされ、メソッドを持たないそのクラスの別のバージョンと一緒に実行されている場合に発生します。)

于 2015-01-14T08:46:10.003 に答える
14

NoSuchMethodExceptionリフレクションを使用してメソッドを呼び出そうとすると発生します。 NoSuchMethodErrorコンパイル中にそのメソッドがあったが、実行時にはそれがない場合に発生します。

次の例を考えてみましょうNoSuchMethodError

クラス : Person.java

public class Person{
      public String getName(){
         return "MyName";
     }
}

を使用してコンパイルし、次を使用 javac Person.java してこれを実行してみます java Person

それはあなたを与えるでしょう

java.lang.NoSuchMethodError: main
Exception in thread "main"

public static void main(String [] args)ないものを見つけようとするから

為にNoSuchMethodException

c = Class.forName("java.lang.String");
  try
  {
    Class[] paramTypes = new Class[2];
    Method m = c.getDeclaredMethod("myMethod", paramTypes);
  }

これは例外をスローします

java.lang.NoSuchMethodException: java.lang.String.myMethod(null, null)

より良い説明があるこのリンクを検討してください

于 2015-01-14T08:47:01.307 に答える
6

NoSuchMethodExceptionリフレクションで存在しないメソッドを取得しようとするとスローされます。Class#getDeclaredMethod(name, parameters)たとえば、間違った名前またはパラメーターで呼び出します。

NoSuchMethodError呼び出そうとしているメソッドが仮想マシンで見つからない場合にスローされます。これは、あるバージョンのライブラリでコンパイルし、後でクラスパス上の別のバージョンのライブラリ (たとえば、呼び出しているメソッドを持たない古いバージョン) でアプリケーションを実行した場合に発生する可能性があります。

于 2015-01-14T08:55:42.543 に答える
2

Class NoSuchMethodException:

特定のメソッドが見つからない場合にスローされます。

Class NoSuchMethodError

アプリケーションがクラス (静的またはインスタンス) の指定されたメソッドを呼び出そうとし、そのクラスにそのメソッドの定義がなくなった場合にスローされます。

こちらの記事も参照してください。

于 2015-01-14T08:45:03.890 に答える