如果不是,运行时如何,实例方法是否使用同一对象的实例变量?例如,我有一个类A,具有实例变量aVariable
和非静态方法aMethod()
.现在我有一个A类的对象,让我们把它命名为aObject.aMethod
利用aVariable
.当我调用这个方法时,它如何知道在内存aVariable
中使用哪个以及它在哪里存储?我们是否将所有对象信息传递给方法?请帮我解决一下这个.
请参阅JVM规范,Sec 3.7:
Run Code Online (Sandbox Code Playgroud)int add12and13() { return addTwo(12, 13); }
这编译为:
Run Code Online (Sandbox Code Playgroud)Method int add12and13() 0 aload_0 // Push local variable 0 (this) 1 bipush 12 // Push int constant 12 3 bipush 13 // Push int constant 13 5 invokevirtual #4 // Method Example.addtwo(II)I 8 ireturn // Return int on top of operand stack; // it is the int result of addTwo()
通过首先将对当前实例的引用推送到操作数堆栈来设置调用.然后推送方法调用的参数,即int值12和13.
因此,this
引用(或接收器参数的任何其他值)只是作为另一个参数被压入堆栈.因此,每个实例不需要单独的方法副本.
归档时间: |
|
查看次数: |
150 次 |
最近记录: |