关于对this关键字的理解

关于对this关键字的理解

废话不多说,直接上笔记图

最主要的思想:在对象初始化的时候,可以理解为同时有一个隐藏的this生成,它存的地址是我们在堆中所申请这个对象首地址。那如何更好的理解这句话?

笔记图来自于韩顺平老师的Java教程的截图,链接在下面

韩顺平Java教程关于this的详解

我们先来看一段在C语言中的代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
    //申请一个在堆中占用4个字节(这里默认是64位操作系统)的空间,指针p指向它
    int *p = malloc(sizeof(int));
    //输出的p的值就是所申请空间的首地址
    printf("指针p的地址%p",p);
    //其他代码
    .......
    //释放所申请的空间
    free(p);
    return 0;
}

上面的this的用法与以上C语言代码中的p指针变量是一个用处。至于在C语言中申请的空间还需释放的问题,在Java中有自动垃圾回收机制,我们暂时不讨论这个。

来看一下this关键字使用的关键细节

1、this 关键字可以访问本类的属性、方法、构造器

2、this用于区分当前类的属性和局部变量

3、访问成员方法的语法:this.方法(参数列表);

4、访问构造器的语法:this(参数列表);注意只能在构造器中使用(既只能在构造器中访问另外一个构造器,必须放在第一条语句)

5、this不能在类定义的外部使用,只能在类定义的方法中使用

用Java代码来简单解释一下

public class thisDetail {
    public static void main(String[] args) {
        T t1 = new T();
        // 用初始化后的对象t1直接访问T类中的fun1的方法
        t1.fun1();
        /**
        *注意一个小细节,你可以用上面那种方法,但你不能使用this.fun1();
        *如果你不清楚为什么,建议反复观看上面的那种笔记图
        */
    }
}
class T{
    // name与age叫做类:T的属性
    String name;
    int age;

    public T(){
        // 对应上面的第四点,在构造器中使用this访问另外一个构造器时,this必须放前面
        this("李四",20);
        // 对应上面的第三点访问成员方法(可以理解为this是一个指针变量,直接指向fun1();)
        this.fun1();
        System.out.println("我是无参构造器T()");
    }
    public T(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("姓名:" + this.name + "年龄:" + this.age);
    }
    public void fun1(){
        System.out.println("我是方法一");
    }
    public void fun2(){
        System.out.println("我是方法二");
    }
}

很显然,上面的代码输入的结果是:

总结

其实不管是Java中的this,或者是C#中的this,又或者是JavaScript中的this…其实最后会发现其用法和原理都是大同小异。学习这些所谓的类C语言,一定要把C语言这门课多学一学,如果C语言的基础都打不好的话,不管是学什么语言,你付出的时间成本都可能比鄙人高很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值