Почему не статический метод имеет дополнительный Local? А что это такое? - PullRequest
2 голосов
/ 02 мая 2011

В соответствии с моим пониманием для каждой локальной переменной в методе 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


}

Ответы [ 2 ]

6 голосов
/ 02 мая 2011

Это текущий объект, a.k.a. this. С Спецификация JVM §3.6.1 Локальные переменные :

При вызове метода экземпляра локальная переменная 0 всегда используется для передачи ссылки на объект, для которого вызывается метод экземпляра (this на языке программирования Java).

3 голосов
/ 02 мая 2011

Я думаю, что это this

...