前言
本篇博客 浅浅来总结了在JavaSE中的this关键字的3种用法,并通过代码示例,希望让每一位铁汁们都把这个知识点弄懂弄透。
先浅浅的总结一下,再详细的介绍:
- this.data —> 访问类中的属性(成员变量);
- this.func() —> 访问类中的方法(成员方法);
- 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关键字的用法有三个:
- this.data —> 访问类中的属性(成员变量);
- this.func() —> 访问类中的方法(成员方法);
- this() —> 调用本类中的其他构造方法。
如果想知道关于this关键字的使用的更多注意点,请移步至:
如果感觉这篇博客对你们有帮助的话,可以送一个免费的 赞 或者是一波小小的 关注 嘛!