如何实现java“this”关键字?

时间:2012-01-19 12:34:54

标签: java

this指针如何指向对象本身?它是java实现还是编译器实现?

3 个答案:

答案 0 :(得分:7)

在JVM字节码中,局部变量0 (基本上是寄存器0)在调用方法时指向当前对象。编译器只使用this作为局部变量0的别名。

所以我猜答案是编译器实现了this

答案 1 :(得分:3)

听起来像是一个哲学问题。我不确定Java实现是什么。

this在JLS中定义,是Java中的关键字,编译必须符合该标准。当你有像

这样的方法时
object.method(args)

在字节代码中实际调用的是一个看起来像

的方法
method(object, args);

其中this是第一个参数。

在JVM级别,参数没有名称,如果没有实际使用,JIT可以优化参数。

答案 2 :(得分:1)

如果您有兴趣为什么不查看编译器生成的字节代码

class HelloWorld
{
   private String hello = "Hello world!";

   private void printHello(){
   System.out.println (this.hello);
}

public static void main (String args[]){
  HelloWorld hello = new HelloWorld();
  hello.printHello();
}

}

使用

进行编译

%JAVA_HOME%/ bin / javac HelloWorld.java

使用

获取字节码

javap -c HelloWorld

编辑添加输出

enter code here

 HelloWorld();
 Code:
 0:   aload_0
 1:   invokespecial   #1; //Method java/lang/Object."<init>":()
 4:   aload_0
 5:   ldc     #2; //String Hello world!
 7:   putfield        #3; //Field hello:Ljava/lang/String;
 10:  return

 public static void main(java.lang.String[]);
 Code:
 0:   new     #6; //class HelloWorld
 3:   dup
 4:   invokespecial   #7; //Method "<init>":()V
 7:   astore_1
 8:   aload_1
 9:   invokespecial   #8; //Method printHello:()V
12:  return

}