一.为什么要引用this?
举个例子:
class Date{ public int year; public int mouth; public int day; public void setDay(int year,int mouth,int day){ year = year; mouth = mouth; day = day; } public void printfDate(){ System.out.println(year + "年" + mouth + "月" + day + "日"); } } public class Test2 { public static void main(String[] args) { Date date = new Date(); date.setDay(2023,3,29); date.printfDate(); } }
如果这段代码是对的,那么它的运行结果是不是是:
2023年3月29日
那么事事实上呢,它的运行结果是:
0年0月0日
为什么会造成这种情况呢?细心的同学会发现,形参名与成员变量名相同
public void setDay(int year,int mouth,int day){ year = year; mouth = mouth; day = day; }
那函数体中到底是谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?估计自己都搞不清楚了,所以我们引入了关键词this。
二、this.属性名的作用
我们将代码稍作修改:
public void setDay(int year,int mouth,int day){ this.year = year; this.mouth = mouth; this.day = day; //分别都加上this }
我们再一次运行代码,这一次结果将是正确的:
2023年3月29日
作用: 当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。
三、this.方法名的作用
我们再将上述代码该成如下代码:
class Date{ public int year; public int mouth; public int day; public void setDay(int year,int mouth,int day){ this.year = year; this.mouth = mouth; this.day = day; } public void printfDate(){ this.school(); System.out.println(year + "年" + mouth + "月" + day + "日"); } public void school(){ System.out.println("开学了"); } } public class Test2 { public static void main(String[] args) { Date date = new Date(); date.setDay(2023,3,29); date.printfDate(); } }
再Date类中又创建了一个school成员方法,那么我们可以直接在其它成员方法中调用这个成员方法。
注意:
- 大部分的时候,一个方法访问该类中定义的其他方法、成员变量时加不加 this 前缀的效果是完全一样的,因为编译器会帮助我们生成一个隐形的this。
- 对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象,所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。
- this只能在成员方法中使用。
三、this()访问构造方法
this( ) 用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。
class Student { String name; // 无参构造方法(没有参数的构造方法) public Student() { this("豆豆"); } // 有参构造方法 public Student(String name) { this.name = name; } public void print() { System.out.println("姓名:" + name); } } public class Test3 { public static void main(String[] args) { Student student = new Student(); student.print(); } }
输出结果:
姓名:豆豆
注意:
- this( ) 不能在普通方法中使用,只能写在构造方法中。
- 在构造方法中使用时,必须是第一条语句。
总结
本篇为大家介绍关键词this,感谢垂读,下篇文章见!