Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java(MicroJava)中定义成员函数体时,是否使用getfield或load?_Java_Bytecode - Fatal编程技术网

在Java(MicroJava)中定义成员函数体时,是否使用getfield或load?

在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指令要求对象的地址位于堆栈顶部,但是,在本例中,它不是(至少我认为它不是,因为我没有明确地将它放在那里,也不知道如何做,因为我在类本身中)

编辑:这个问题与MicroJava字节码有关,而不是实际的Java字节码


字节码问题-考虑以下内容:

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是专门用于数组的,因此我感到困惑。无论如何谢谢你!