2011-05-02 4 views
2

방법 1에있는 모든 로컬 변수 정의에 대한 필자의 이해에 따라이 지역 표시기에 대해 로컬이 추가되었습니다.정적이 아닌 메서드에 추가 Local이있는 이유는 무엇입니까? 그리고 이것은 무엇입니까?

출처 :

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

을 있다는 것이다. the JVM Spec §3.6.1 Local Variables에서 : 인스턴스 메소드 호출, 지역 변수 0

항상 (Java 프로그램 언어의 this) 인스턴스 메소드가 불려 가고있는 개체에 대한 참조를 전달하는 데 사용됩니다.

3

내 생각은 그것이 현재 객체, this 일명입니다 this

+0

내 추측을 잡았습니다! :) +1 –

+2

하지만 사양에서 직접 인용 한 것보다 나은 것입니다 :-) –

+0

그 논쟁 수 없습니다 :-) –

관련 문제