zoukankan      html  css  js  c++  java
  • “this” pointer

    As usual, a sample first.
    ==========================
    package ch.allenstudy.newway01;

    public class ThisPointer {

    public static void main(String[] args) {
    A aa1 = new A(10);
    A aa2 = new A(20);
    aa1.show();
    aa2.show();
    }

    }

    class A {
    public int i;

    public A(int a) {
    i = a;
    }

    public void show() {
    System.out.printf(“i = %d\n”, i);
    }
    }
    ==========================================
    In the memory it’s like this:

    So you see, the aa1 and aa2 are in the stack, new A() are in the heap, but all the methods are stored in the code segment part, not in heap or stack.

    If all objects are using the same methods in the memory, aa1′s value is 10, aa2′s value is 20. how do they avoid the conflict for using different parameter values?
    The answer is: they are using a hidden “this” pointer.

    If convert the up code into a C style of code, it maybe like:
    ————————————
    package ch.allenstudy.newway01;

    public class ThisPointer {

    public static void main(String[] args) {
    A aa1 = new A(10);
    A aa2 = new A(20);
    aa1.show();
    aa2.show();
    }

    }

    class A {
    public int i;

    public A(int a) {
    i = a;
    }

    public void show(A * this) {
    System.out.printf(“i = %d\n”, (*this).i);
    }
    }
    =============================
    This 是一个系统隐含的指针被自动附加在非静态的成员函数参数列表中。当前时刻,那个对象调用该函数,那么this就指向当前调用该函数的对象。系统会自动在该 函数的参数列表中添加一个银行的this指针,并把调用该函数的对象地址付给this指针,这样在函数内部通过this就可以访问当前正在调用该函数的对 象的成员。静态(static)函数内部没有this指针。

    Another sample:
    ———————–
    package ch.allenstudy.newway01;

    public class ThisPointer
    {
    private String name; //”name” is a property of the class
    private int age; //”age” is another property of the class

    public ThisPointer(String name, int age)
    {
    this.name = name; //this.name means the property “name”.
    this.age = age; //this.age means the property “age”.
    }

    public void showInformation()
    {
    System.out.printf(“%d\n”,this.name);
    }

    }

  • 相关阅读:
    tars go版本源码分析
    goim源码阅读
    vue weixin源码解读
    避免加锁的骚操作
    git一些常用操作
    eclipse 的习惯配置
    ai资源站
    转载 github上的一些安全资源收集
    转载 一个统计代码行数的python脚本
    C语言开发工具
  • 原文地址:https://www.cnblogs.com/backpacker/p/2271546.html
Copyright © 2011-2022 走看看