> 文档中心 > JavaSE中 this关键字的3种用法,你都知道吗?

JavaSE中 this关键字的3种用法,你都知道吗?


前言

       本篇博客 浅浅来总结了在JavaSE中的this关键字的3种用法,并通过代码示例,希望让每一位铁汁们都把这个知识点弄懂弄透。


先浅浅的总结一下,再详细的介绍:

  1. this.data      —>      访问类中的属性(成员变量);
  2. this.func()    —>     访问类中的方法(成员方法);
  3. this()            —>      调用本类中的其他构造方法。


一、访问类中的属性(成员变量)

       为了防止方法的形参名 与 成员变量名相同,而使得方法内部的变量 与形参变量一样,因此我们会引用this关键字 来防止这一错误的发生:

错误代码示例:

public class Date { public int year; public int month; public int day; /* 设置日期的方法 */ public void setDate(int year,int month,int day){     year = year;     month = month;     day = day; } /* 打印日期的方法 */ public void printDate(){     System.out.println("年:"+year+" 月:"+month+" 日:"+day); } public static void main(String[] args) {     Date date = new Date();     date.setDate(2022,3,30);     date.printDate(); }}

 错误代码示例结果:

 正确代码示例 (修改了设置日期的方法):

public class Date { public int year; public int month; public int day;  /* 设置日期的方法 */ public void setDate(int year,int month,int day){     this.year = year;     this.month = month;     this.day = day; }  /* 打印日期的方法 */ public void printDate(){     System.out.println("年:"+year+" 月:"+month+" 日:"+day); } public static void main(String[] args) {     Date date = new Date();     date.setDate(2022,3,30);     date.printDate(); }}

正确代码示例结果:

 

二、访问类中的方法(成员方法)

简单的来说,就是可以通过this关键字来调用 已经定义好的方法:

public class Person {    public String name;    public int age;    public void eat(){ System.out.println("正在吃饭");    }    public void sleep(){ System.out.println("正在睡觉"); this.eat();    }    public static void main(String[] args) { Person person = new Person(); person.sleep();    }}

上面示例结果:


三、调用本类中的其他构造方法

先简单了解一下构造方法:

public class Student {    public String name;    public int age;    public void show(){ System.out.println("姓名"+name+"年龄"+age);    }    public Student(){ System.out.println("这是一个不带参数的构造方法");    }    public Student(String name,int age){ this.name = name; this.age = age; System.out.println("这是一个带2个参数的构造方法");    }    public static void main(String[] args) { Student student = new Student("张三",19); student.show();    }}

执行流程:

第一步:局部变量student在栈上,指向了在堆上分配的内存(有name和age)的地址;

第二步:调用了合适的构造方法,把“张三”给了name,把“19”给了age。

所以,如果此时来调用show()方法,那么会打印出来:

 

接下来是正题:this()调用本类中其他的构造方法:

第一步:如下列代码,它会首先调用无参的构造方法:

public class Student {    public String name;    public int age;    public void show(){ System.out.println("姓名:"+name+" 年龄:"+age);    }    public Student(){ System.out.println("这是一个不带参数的构造方法");    }    public Student(String name,int age){ this.name = name; this.age = age; System.out.println("这是一个带2个参数的构造方法");    }    public static void main(String[] args) { Student student = new Student();    }}

 

第二步:向无参构造方法里面 加入this()关键字,以 调用本类中带有两个参数的构造方法(第一个参数的类型是String,第二个参数的类型是int):

必须要把this()放在第一行,否则会报错的:

public class Student {    public String name;    public int age;    public void show(){ System.out.println("姓名:"+name+" 年龄:"+age);    }    public Student(){ this("张三",19); System.out.println("这是一个不带参数的构造方法");    }    public Student(String name,int age){ this.name = name; this.age = age; System.out.println("这是一个带2个参数的构造方法");    }    public static void main(String[] args) { Student student = new Student();    }}

根据打印的顺序可以发现,new了一个学生对象以后,首先会调用无参的构造方法,

根据执行的先后顺序,先把this()执行完以后,才会执行 打印“这是一个不带参数的构造方法”的语句,

通过this()关键字 调用了有参构造方法,先赋值,再打印“这是一个带2个参数的构造方法”,才算把这一有参构造方法结束;

所以才会 先打印 “这是一个带2个参数的构造方法”,再打印“这是一个不带参数的构造方法”。

​​​​​​​


总结

this关键字的用法有三个:

  1. this.data      —>      访问类中的属性(成员变量);
  2. this.func()    —>     访问类中的方法(成员方法);
  3. this()            —>      调用本类中的其他构造方法。

如果想知道关于this关键字的使用的更多注意点,请移步至:

【JavaSE系列】第七话 —— 类和对象(1)(内含this关键字更多注意点内容)

如果感觉这篇博客对你们有帮助的话,可以送一个免费的  或者是一波小小的 关注 嘛!