日期:2014-05-17  浏览次数:20614 次

NoSuchMethodError和NoSuchMethodException 区别
java中有NoSuchMethodError和NoSuchMethodException,有什么区别呢?分别什么时候会报这两种错误(异常)呢?

------解决方案--------------------
NoSuchMethodError:
    当应用程序试图调用类(静态或实例)的指定方法,而该类已不再具有该方法的定义时,抛出该异常。 
    通常由编译器捕获该错误;仅当类定义发生不相容的更改时,在运行时才会发生该错误。 
    (Thrown if an application tries to call a specified method of a class (either static or        instance), and that class no longer has a definition of that method.

    Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.)



NoSuchMethodException:
    无法找到某一特定方法时,抛出该异常。
    (Thrown when a particular method cannot be found.)
------解决方案--------------------
说实在的,我对这个也完全不清楚,凭感觉给个说法
我估计应该前者是普通的A.b()形式调用,在极其特殊的情况下,发现A类里面没有b方法时抛出,一般情况下这种错误是不会存在的,连编译前的检查都没法通过。但是可能在某些极端情况下出现,比如字节码在内存中被改了。
而后者我估计是在反射的时候,依据传入的方法名寻找方法时没找到。

我之所以这样猜测的理由是:Error代表的是无法恢复的错误,必须由jvm处理或者终止,而Exception是可以恢复的异常,程序员可以自行捕获。那么,如果是我前面所说的情况,那种错误完全是程序无法也不可能捕获的,后者,有时程序员会需要捕获它进行相应的处理。

比如quartz在xml文件里配置了要调用的类名、方法名,就有可能你填写的方法名是错的,这个时候抛出的就必须是Exception,然后捕获并作相应处理,不然Error了程序就挂掉了,那当然是不可忍受的