2011-05-02 46 views
2

根据我对方法1中的每个局部变量定义的理解,为本地人指示符添加了局部变量。为什么非静态方法有额外的本地?还有,这是什么?

来源:

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 


} 

回答

6

这是当前对象,也叫做this。从the JVM Spec §3.6.1 Local Variables

在实例方法调用,局部变量0总是被用来传递(在Java编程语言this),以在其上被调用的实例方法的对象的引用。

3

我的猜测是,它的this

+0

我猜! :) +1 – 2011-05-02 09:27:46

+2

但是,从规范直接引用比猜测更好:-) – 2011-05-02 09:31:55

+0

不能争论的:-) – 2011-05-02 10:34:00

相关问题