2015-01-14 18 views
12

JavaでNoSuchMethodExceptionNoSuchMethodErrorの間に正確な違いが見つかりません。誰かがこの2つのことの説明と例を挙げることができますか?JavaのNoSuchMethodExceptionとNoSuchMethodErrorの相違

+1

(あなたが呼んでいるメソッドを持っていないなど、古い1)あなたは、ライブラリの1つのバージョンでコンパイルしたときに起こる、と後でクラスパス上にライブラリの別のバージョンを使用してアプリケーションを実行することができますターゲットメソッドが見つからないことが予想されるメソッドを呼び出します。 NoSuchMethodErrorは、メソッドが欠落している場合に発生しますが、通常は通常のコードでは発生しません。 –

答えて

1

Class NoSuchMethodException

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

。アプリケーションクラス (静的またはインスタンスのいずれか)の指定されたメソッドを呼び出そうとしない、そのクラスはもはやそのメソッドの定義 を有している場合にスロー

Class NoSuchMethodError

この詳細はarticleを参照してください。

+0

ハイMaroun:私は理解できないが、「このクラスは、もは​​やそのメソッドの定義を持っていない」この文を説明してください。 – Balasubramani

+4

これは、呼び出し側のクラスが変更されたクラスを認識していないことを意味します。この方法は、呼び出し元のクラスがコンパイルされたときがありましたが、ランタイム中 - 何かに変更し、あなたの明確な説明のためにもう – shikjohari

+0

感謝のShikjohariそれを見つけることが、そのことはできません。 – Balasubramani

22

NoSuchMethodExceptionは、リフレクションによってメソッドを呼び出すときにスローされる可能性があり、メソッドの名前はプログラムの変数から取得されます。

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

+0

、メソッドの名前は、実際には、この例外がスローされるようにするための変数から来る必要がありますか? – SantiBailors

+0

これはフィールドでも、メソッドの呼び出しや式の評価の結果でもかまいません。 – yole

+0

確かに、実際に私の質問はあまりにも明確ではなかった、私はそれが文字列リテラルまたは定数であることを意味するのですか? – SantiBailors

13

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" 

これは、LL

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

が良く、について説明を持っているこのlinkを考えてみましょうと言って例外をスローしているNoSuchMethodException

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

のためにそこに

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

4

NoSuchMethodExceptionが存在しないメソッドを取得しようとすると、がスローされます。例えば。間違った名前またはパラメータを使用してClass#getDeclaredMethod(name, parameters)を呼び出してください。仮想マシンは、あなたが呼び出すためにしようとしている方法を見つけることができないとき

NoSuchMethodErrorがスローされます。これがないNoSuchMethodExceptionが発生したときに

関連する問題