java做法,Java方法表

I learned a lot about how C++ manages its virtual tables in the presence of inheritance (multiple, virtual etc.) and how it lays the objects in memory.

Now, Java only has to worry about single line of inheritance, no instance method hiding etc. so virtual tables should be a bit simpler in this case. I know that Class files act as "gateways" to method area, where type definitions are stored, including method bytecode I presume. The following two questions come to my mind:

Is there any vtable/method table structure in Java in general? How is it stored and linked to Class objects?

How is inheritance/dynamic method call solved? What I mean is:

Having the following classes and instantiations:

class A{ int f(){...} }

class B extends A{ int f(){...} }

A a = new B();

a.f();

f() in B is called. Is A resolving through Class file of B the right method pointer?

Thanks a lot in advance for your comments.

解决方案

The call to a.f() is realized in the java bytecode assembly language as:

aload_1 // load the local variable a, here from local address 1

invokevirtual with index into the constant pool for

method ref:

class "A"

nameAndType "f", "()I"

At run-time possibly the vtable then solves the call to B.f().

But as you may see, the class format is quite abstract, and the JVM has all liberty on loading the class for an "efficient" implementation.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值