1.this我们用的非常多,但是没有搞清楚为啥我们可以在实例方法中使用this。这里我从java字节码的角度来分析this。
2.代码:
public class Test {
private static String hello(String hello){
return hello + "hello";
}
private String sayHello(String hello){
return hello + "hello";
}
}
(1)我们从sayHello方法表的局部变量表中发现都一个this局部变量,但是在hello()方法中就没有局部变量this。
(2)javap 查看,我们发现参数大小2,局部变量2,栈的深度2.
private java.lang.String sayHello(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
flags: ACC_PRIVATE
Code:
stack=2, locals=2, args_size=2
总结:
java的实例方法(非static),在其编译后锁生成的字节码中,方法的参数会比源代码多一个this,而且在第一个参数位置的地方,这样我们就可以通过this来访问当前对象的方法和属性。那也就是说局部变量表中至少存在一个指向当前对象的局部变量。该参数由运行时jvm想实例方法注入this参数。