java字节码-this分析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值