JVM方法调用-解析和分派

请大家看看我对这个的理解对不对。
如果调用一个虚方法-invokevirtual,首先会在编译时通过静态分派,确定它的重载版本,也就是根据参数的静态类型确定是哪个方法
然后运行时再通过动态分派通过对象的实际类型来确定执行哪个类的方法。具体就是先找具体类型,如果有这个方法,执行;没有就去父类寻找,如此循环。最后将符号引用转化为直接引用

如果调用的是一个非虚方法-invokestatic、invokespecial或者被final修饰的方法,首先还是通过静态分派,确定方法的重载版本。
但是因为这些方法都不可能被重写,所以在类加载的解析阶段就会直接把它们转化为直接引用

静态分派发生在编译时,确定方法重载版本
动态分派发生在运行时,也就是动态连接, 方法调用者不唯一,方法重写的实现
解析发生在类加载的解析阶段,方法调用者唯一

#Java工程师##Java#
全部评论

相关推荐

刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
本科生是不是只能去送外卖了
有气魄的海豚在喝茶:外卖这个版本被保安克制
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务