假设一种场景,a模块中调用b模块中某对象的某方法。如果b模块中的该方法返回值类型发生了改变,
那么a模块在运行的时候会抛出java.lang.NoSuchMethodException找不到方法异常 还是 java.lang.ClassCastException类型转换异常。
A模块:
public class A_Class(){
         public void A_Method(){
                  b.B_Class bc = new b.BClass();
                  int a = bc.add("hello");
        }
}B模块:
public class B_Class(){
         public String B_Method(String str){
                  return str;
         }
}补充:不要说A模块中的方法编译就不通过,是以目前的代码看A模块中的代码是不通过编译,无法执行的。
但是如果B模块中的B_Method方法第一版本的返回值是int类型,A模块经过了编译可以正常执行。
若B模块在没有通知A模块的情况下将方法的返回值改变了。那么A是原来已经编译好的class。这个时候运行
你觉得会抛出哪种异常。
是直接找不到方法,还是方法会执行,但是类型转换会发生异常?
欢迎各位大神 指导

解决方案 »

  1.   

    会报这个错:java.lang.NoSuchMethodError 。
    这个跟类型没什么关系。
    b的方法虽然方法名相同但返回值不一样,在编译成class的时候是不一样的(也就是底层不一样)。
    a在运行时调用b的方法,虽然之前已经编译通过了,但在运行的时候找不到b的方法,所以报NoSuchMethodError 。这个跟把b的方法删除,在编译,再运行A其实时一个道理
      

  2.   

    1. 自己测试就知道了
    2. 会抛出NoSuchMethodError而不是NoSuchMethodException或ClassCastException
    3. 自己查阅JVM规范 里面说的很清楚