Java 为什么非静态方法有额外的局部性?那是什么?

Java 为什么非静态方法有额外的局部性?那是什么?,java,jvm,bytecode,Java,Jvm,Bytecode,根据我对方法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

根据我对方法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


}
从“A.java”编译而来
公共类A扩展了java.lang.Object
源文件:“A.java”
次要版本:0
主要版本:50
固定池:
常数#1=方法#3.#12;//java/lang/Object。“:()V
常数2=类13;//A.
常数3=类14;//java/lang/Object
常数4=Asciz;
常数#5=Asciz()V;
常量#6=Asciz代码;
常数#7=Asciz LineNumberTable;
常数#8=a;
常数#9=Asciz b;
const#10=Asciz源文件;
const#11=Asciz A.java;
常数#12=名称和类型#4:#5;//“”:()V
常数13=A;
const#14=Asciz java/lang/Object;
{
公共A();
代码:
堆栈=1,局部变量=1,参数大小=1
0:aload_0
1:invokespecial#1;//方法java/lang/Object。“:()V
4:返回
LineNumberTable:
第1行:0
公共无效a();
代码:
堆栈=0,局部变量=1,参数大小=1
0:返回
LineNumberTable:
第6行:0
公共静态无效b();
代码:
堆栈=0,局部变量=0,参数大小=0
0:返回
LineNumberTable:
第11行:0
}

我猜它是
这个
它是当前对象,也就是
这个
。发件人:

在调用实例方法时,始终使用局部变量
0
传递对调用实例方法的对象的引用(Java编程语言中的
this


但直接引用规范比猜测要好:-)