this关键字及内存分配

以如下程序为例分析this关键字及内存分配

public class TestThis {
    int i = 0;

    TestThis(int i) {
        this.i = i; //类成员变量名字是i,构造方法的形式参数名字也是i,使用this指向本类
        /*当变量不明时,如无法确定本句中的i是类的成员变量i还是形式参数i,寻找最近的声明,本例中最近的声明是形式参数int i,所以此处的i为形式参数而非成员变量*/
    }

    TestThis increament() {
        i++;
        return this;
    }

    void print() {
        System.out.println("i = " + i);
    }

    public static void main(String[] args) {
        TestThis testThis = new TestThis(100);
        testThis.increament().increament().print();
    }
}
首先,执行TestThis testThis = new TestThis(100),在栈内存中新建一个名为testThis的引用,在堆内存中new一个TestThis对象,名为testThis指向这个TestThis对象。TestThis对象中包含一个i变量和this指针,this指针指向自身。调用构造方法,构造方法有形式参数 i,栈内存中为其分配一块名为 i 的区域,100传递为 i 的值。i 的值传递给this.i 即 i 将值传递给this指向的对象的成员变量 i ,对象的成员变量 i 值变为1。构造方法执行完毕。执行完毕后构造方法的形式参数所占用的内存块消失。         

    01
   
    02

    继续执行,testThis.increament().increament().print(),首先执行testThis.increament()方法,i 变成101,increament()方法最后return this,return的值会存放在栈内存的一块临时区域里,return的值跟this的值相同,故这块区域是指向对象的一个引用。
    03
    接下来执行testThis.increament().increament(),与第一次执行increament()一样,首先i值会+1变成102,然后执行return,栈内存中新给一块临时区域存放指向对象的引用。
    04
    接下来执行print(),此时有字符串常量“i =”,这个字符串常量存到data segment中,最终完成输出。
    04

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值