Java中的this是怎么样实现的

一段Java代码public class Main { void fun() { }}javap -verbose 之后code区如下{ public com.lee.Main(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."\u0026lt;init\u0026gt;":()V 4: return LineNumberTable: line 3: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lcom/lee/Main; void fun(); descriptor: ()V flags: Code: stack=0, locals=1, args_size=1 0: return LineNumberTable: line 6: 0 LocalVariableTable: Start Length Slot Name Signature 0 1 0 this Lcom/lee/Main;}注意其中的args_size这个参数,他代表方法的参数数量。第一个方法是自动生成的构造方法,第二个为自定义的fun方法。fun方法并没有参数,但是args_size为1。这个参数就是带入的对象引用。也就是说对于Main类的对象main,调用fun方法 写作main.fun()。事实上相当于fun(main),所以this就相当于本地变量表中的第一个空位(注意构造方法中的aload_0)。这也是为什么static方法中不能用this。
■网友
谁调用他,this指带的就是谁


    推荐阅读