JavaSE中 this关键字的3种用法,你都知道吗?
前言
本篇博客 浅浅来总结了在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关键字的使用的更多注意点,请移步至:
【JavaSE系列】第七话 —— 类和对象(1)(内含this关键字更多注意点内容)
如果感觉这篇博客对你们有帮助的话,可以送一个免费的 赞 或者是一波小小的 关注 嘛!