为什么非静态方法有额外的Local?那是什么?
根据我对方法 1 中定义的每个局部变量的理解,local 是为此 Locals 指示器添加的。
来源:
public class A {
public void a() {}
public static void b() {}
}
生成的字节码:
Compiled from "A.java"
public class A extends java.lang.Object
SourceFile: "A.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #3.#12; // java/lang/Object."<init>":()V
const #2 = class #13; // A
const #3 = class #14; // java/lang/Object
const #4 = Asciz <init>;
const #5 = Asciz ()V;
const #6 = Asciz Code;
const #7 = Asciz LineNumberTable;
const #8 = Asciz a;
const #9 = Asciz b;
const #10 = Asciz SourceFile;
const #11 = Asciz A.java;
const #12 = NameAndType #4:#5;// "<init>":()V
const #13 = Asciz A;
const #14 = Asciz java/lang/Object;
{
public A();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
public void a();
Code:
Stack=0, Locals=1, Args_size=1
0: return
LineNumberTable:
line 6: 0
public static void b();
Code:
Stack=0, Locals=0, Args_size=0
0: return
LineNumberTable:
line 11: 0
}
As per my understanding for each and every local varible define in method 1 local is added for this Locals indicator.
Source :
public class A {
public void a() {}
public static void b() {}
}
Generated bytecode :
Compiled from "A.java"
public class A extends java.lang.Object
SourceFile: "A.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #3.#12; // java/lang/Object."<init>":()V
const #2 = class #13; // A
const #3 = class #14; // java/lang/Object
const #4 = Asciz <init>;
const #5 = Asciz ()V;
const #6 = Asciz Code;
const #7 = Asciz LineNumberTable;
const #8 = Asciz a;
const #9 = Asciz b;
const #10 = Asciz SourceFile;
const #11 = Asciz A.java;
const #12 = NameAndType #4:#5;// "<init>":()V
const #13 = Asciz A;
const #14 = Asciz java/lang/Object;
{
public A();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
public void a();
Code:
Stack=0, Locals=1, Args_size=1
0: return
LineNumberTable:
line 6: 0
public static void b();
Code:
Stack=0, Locals=0, Args_size=0
0: return
LineNumberTable:
line 11: 0
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它是当前对象,又名
this
。来自 JVM 规范第 §3.6.1 局部变量< /a>:It is the current object, a.k.a.
this
. From the JVM Spec §3.6.1 Local Variables:我的猜测是
这个
My guess would be that it's
this