在Java中的this
关键字比较灵活主要有一下三种作用:
使用this
关键字调用本类中的属性
没有使用this关键字
class Student{
private String name;
private int age;
public Student(String name, int age) {
name = name;//可以看到这里没有使用this关键字
age = age;
}
public void read() {
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("张三", 18);
student.read();
}
}
运行结果如下图:
- 可以看到最终运行结果表现为默认值,实际的赋值可没有传进去
使用了this关键字
class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;//可以看到这里使用this关键字
this.age = age;
}
public void read() {
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("张三", 18);
student.read();
}
}
运行结果如下图:
- 可以看到运行结果与赋值一致,成功的调用构造方法完成了对象的初始化。这里
this
关键字的作用就是用来指代当前对象,通过this
关键字可以访问当前对象的成员。 - 体现在这里就是使用了
this
调用了student
类中的两个成员变量name
与age
使用this
关键字调用本类中的方法(不常用)
class Student{
public void read() {
}
public void write() {
this.read();//使用了this关键字调用
read();//常用
}
}
第七行
使用this
调用本类中的成员方法,值得注意的是this
其实可以省略不写的。所以第七行
和第八行
作用一样。
使用this
关键字调用构造方法
class Student{
private String name;
private int age;
public Student() {
System.out.println("调用了无参构造方法");
}
public Student(String name, int age) {
this();//这里使用了this关键字调用了上面无参构造方法,可以注意到在该方法中的三条语句中this()在第一句
this.name = name;
this.age = age;
}
public void read() {
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("张三", 18);
student.read();
}
}
运行结果:
这段代码在Student
类中定义一个无参构造方法和一个有参构造方法,同时在有参构造方法中使用this
关键字调用了无参构造方法。
在使用this
关键字调用类的构造方法时,有以下三点需要注意:
- 只能在构造方法中使用
this
关键字调用其他的构造方法,不用在成员方法使用this
关键字调用构造方法 - 在构造方法中,使用
this
关键字调用其他构造方法语句必须位于第一行,且只能出现一次 - 在同一个类中的两个构造方法不能使用
this
关键字相互调用