前言
在我刚开始学习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关键字
- 当局部变量和全局变量重名时用this.变量名表示全局变量
- this.方法名,调用本类的方法
- 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调用构造器