在Java(MicroJava)中定义成员函数体时,是否使用getfield或load?
编辑:这个问题与MicroJava字节码有关,而不是实际的Java字节码在Java(MicroJava)中定义成员函数体时,是否使用getfield或load?,java,bytecode,Java,Bytecode,编辑:这个问题与MicroJava字节码有关,而不是实际的Java字节码 字节码问题-考虑以下内容: class C { int d; int m() { return d; } } 定义函数m()的主体时,它应该如下所示: enter 0, 0 getfield 0 exit return 现在,getfield指令要求对象的地址位于堆栈顶部,但是,在本例中,它不是(至少我认为它不是,因为我没有明确地将它放在那里,也不知道如何做,因为我在类本身中)
字节码问题-考虑以下内容:
class C {
int d;
int m() {
return d;
}
}
定义函数m()的主体时,它应该如下所示:
enter 0, 0
getfield 0
exit
return
现在,getfield
指令要求对象的地址位于堆栈顶部,但是,在本例中,它不是(至少我认为它不是,因为我没有明确地将它放在那里,也不知道如何做,因为我在类本身中)
另一方面,load
指令将与函数本身相关,因为我没有向函数传递任何参数,所以这似乎是不可能的
此外,由于类C
是在另一个类(即程序)中定义的,因此使用getstatic
也应该是错误的,因为它不是全局变量
有什么想法吗?在我的平台上,它看起来像
aload\u 0
getfield\2
ireturn
。不要只是猜测字节码。运行javap-c
命令来实际查看它。哦,现在我很困惑,aload
不是用于数组吗?!另外,这不是纯java,它实际上是MicroJava,一种我们在编译器课程中必须实现的语言。(回想一下数组也是对象。)呃,我只是想说(假设),但我只能在5分钟后编辑帖子。无论如何,这对我并没有多大帮助,因为在MicroJava中,aload是专门用于数组的,因此我感到困惑。无论如何谢谢你!