一个有意思的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。这个时候运行
你觉得会抛出哪种异常。
是直接找不到方法,还是方法会执行,但是类型转换会发生异常?
欢迎各位大神 指导


...全文
401 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
为啥呢?各大神能不能给点分析思路?
爱写Bug的麦洛 2017-11-18
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
真没意思。。。。。。。。。。
偶遇贴吧大神,哈哈哈
李德胜1995 2017-11-18
  • 打赏
  • 举报
回复
真没意思。。。。。。。。。。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧