目录
1.修饰属性,表示调用类中的成员变量
首先,我们先来了解一个概念:
程序的就近匹配原则:编译器会从调用代码处的最近位置查找有无匹配的变量或者方法,若找到直接使用最近的变量或方法。
eg:定义一个学生类,使用构造方法时,如果我们这样写,其实是构造函数中的形参在自己调用自己,很明显是错误的。这样并没有将构造函数中传入的值赋给成员变量,也就是由于就近匹配原则导致的。
我们实际上想表达的意思是将构造函数传入的值赋给成员变量,这时我们就可以使用this关键字来解决这个问题,如下:
public class Student {
/*
定义一个学生类
*/
public String name;//姓名
public int sno;//学号
public Student(String name, int sno) {
this.name = name;
this.sno = sno;
}
}
2.修饰方法
(1).修饰普通方法(可写可不写)
语法格式:this.方法名(参数);
最好写上,使用 this 表示明确表示调用的是当前类的方法。
public void fun(){
System.out.println("姓名为:"+name+" 学号为:"+sno);
this.show();//等同于show();
}
public void show(){
System.out.println("调用show成员方法");
}
(2).this修饰构造方法
语法格式:this(构造方法的参数);
注意:没有 “.” 表示调用的类中的构造方法。
主要可以表示构造方法之间的相互调用。
思考:
这样做的目的:主要是减少了代码的重复。
public Student() {//无参构造函数
System.out.println("************");
}
public Student(String name) {//有一个参数的构造函数
this();//调用无参构造函数
this.name = name;
}
public Student(String name, int sno) {//有两个参数的构造函数
this(name);//调用有一个参数的构造函数
}
注意:
- a.this调用构造方法必须放在当前构造方法的首行调用。
- b.对构造方法的调用不能成 “环” ,必须线性调用。
3.this表示当前对象的引用(就像照镜子)
当前是通过哪个对象调用的属性或者方法,this就指代谁。
public void fun1(){
System.out.println(this);
}
public static void main(String[] args) {
Student stu=new Student("生菜虾",1234);
System.out.println(stu);
stu.fun1();
System.out.println("-----------------");
Student stu1=stu;
System.out.println(stu1);
stu1.fun1();
System.out.println("-----------------");
Student stu2=new Student("蜜桃兔",2333);
System.out.println(stu2);
stu2.fun1();
}
注意:
this不能在静态域中使用 。
如有建议或想法,欢迎一起讨论学习~