java字节码-this分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014172271/article/details/84034695

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参数。

猜你喜欢

转载自blog.csdn.net/u014172271/article/details/84034695