this关键字

前言

在我刚开始学习Java语法的时候,总是不太理解this的含义是什么,现在也可以说不是那么理解,写这篇blog的时候对JVM虚拟机知识还不太懂,这里记录一下我查找的关于this的知识和查找的书籍记载,结尾我会附上我查找资料链接,让看到这篇blog的人可以看到原始资料,因为这篇blog也仅是记录我自己的思维运转过程,我希望大家可以看到我的思考,然后有自己的思考和想法,更有助于大家理解和记忆,也写给未来忘了这个知识点的我一个思考回忆点,可以复现曾经的思考,下面给出文章总体目录:

在这里插入图片描述

this是什么

this关键字,表示的是对当前对象的引用,也称为自引用,在Java核心技术卷1中称为隐式参数,这个隐式参数的作用就是获得当前对象的引用,this和我们new的某一个类的对象引用本质上没有区别

this被设计出来的背景

这里是Java编程思想中的原文,“为了能用简便、面向对象的语法来编写代码”,先记住这句话,我们抱着以面向对象的编程思维为出发点,大家看下面的代码示例,示例也出自Java编程思想。
有这样一个类:

public class Apricot {
    void pick(){
        System.out.println("pick()");
    }
    void pit(){
        pick();
    }

    public static void main(String[] args) {
        Apricot apricot = new Apricot();
        apricot.pit();
    }
}

我们可以看到Apricot类中有两个方法,pick()和pit()方法,而在pit()方法中调用了pick()方法,当我们想要在Apricot类中的pit()方法中调用同类的pick()方法时,可以看到很简单直接调用就完事了,就像代码中写的那样,但是我们本着面向对象的编程思想我们必须通过对象才可以调用方法,这里回忆上面说的那句话,本着面向对象的编程思想,我们在调用方法的时候一定是对象来调用方法,而this关键字就是表示调用方法的那个对象

Java编程思想——“this关键字只能在方法内部使用,表示对调用方法的那个对象的引用”

我们注意到代码中没有用到this关键字,但是pit()方法同样可以调用pick()方法是因为编译器已经自动帮我们添加了,所以说如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用就

this设计的背景就是为了在方法内部获得方法调用对象的引用。

我们在哪里使用this关键字

  1. 当局部变量和全局变量重名时用this.变量名表示全局变量
  2. this.方法名,调用本类的方法
  3. this(参数签名),在构造器中调用构造器
//1、区分局部变量和全局变量
public class Apricot {  
    
    private String name;

    public Apricot(String name) {
        this.name = name;
    }
}
//2.this.方法名,调用本类的方法(当然这里可以省略)
public class Apricot {
    void pick(){
        System.out.println("pick()");
    }
    void pit(){
        this.pick();
    }

    public static void main(String[] args) {
        Apricot apricot = new Apricot();
        apricot.pit();
    }
}
//3.在构造器中调用构造器(根据参数类型)
public class Apricot {

    private String name;

    private Integer age;

    private String color;

    public Apricot(String name) {
        this.name = name;
    }
    public Apricot(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Apricot(String name, Integer age,String color) {
        this(name, age);
        this.color = color;
    }

    /*
    * 省略get和set方法
    * */
    
    public static void main(String[] args) {
        Apricot apricot = new Apricot("银杏", 25, "金色");
        System.out.println(apricot.getName());
    }
}

当我们通过this调用构造器的时候注意,但是我们只能调用一个,一般我们也只需要调用一个,而且必须在最开始调用,也就是在构造方法第一行调用,否则会编译出错,而且我们只能在构造方法中调用,不允许在别的方法中通过this调用构造器

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值