一个有意思的BUG 分析疑惑

祈_福 2017-11-18 11:39:49
假设一种场景,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。这个时候运行
你觉得会抛出哪种异常。
是直接找不到方法,还是方法会执行,但是类型转换会发生异常?
欢迎各位大神 指导


...全文
373 8 1 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yannsPeng 2017-11-21
引用 2 楼 Milogenius 的回复:
[quote=引用 1 楼 pany1209 的回复:] 真没意思。。。。。。。。。。
偶遇贴吧大神,哈哈哈[/quote] 他出镜率这么高怎么可能是初遇。。。
  • 打赏
  • 举报
回复
Clumsy__Cat 2017-11-21
好无聊的一个问题
  • 打赏
  • 举报
回复
dgqjava 2017-11-20
1. 自己测试就知道了 2. 会抛出NoSuchMethodError而不是NoSuchMethodException或ClassCastException 3. 自己查阅JVM规范 里面说的很清楚
  • 打赏
  • 举报
回复
qq_38396900 2017-11-19
应该是 类型错误
  • 打赏
  • 举报
回复
踏 浪 2017-11-19
会报这个错:java.lang.NoSuchMethodError 。 这个跟类型没什么关系。 b的方法虽然方法名相同但返回值不一样,在编译成class的时候是不一样的(也就是底层不一样)。 a在运行时调用b的方法,虽然之前已经编译通过了,但在运行的时候找不到b的方法,所以报NoSuchMethodError 。 这个跟把b的方法删除,在编译,再运行A其实时一个道理
  • 打赏
  • 举报
回复
祈_福 2017-11-19
为啥呢?各大神能不能给点分析思路?
  • 打赏
  • 举报
回复
麦洛_ 2017-11-18
引用 1 楼 pany1209 的回复:
真没意思。。。。。。。。。。
偶遇贴吧大神,哈哈哈
  • 打赏
  • 举报
回复
李德胜1995 2017-11-18
真没意思。。。。。。。。。。
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2017-11-18 11:39
社区公告
暂无公告