一:this关键字
1:this是一个关键字,表示当前对象的引用。
二:this的用法
1:this.data; //访问实例变量
2:this.function(); //访问实例方法
3:this(参数); //调用本类当中其他构造方法
三:代码解释用法
1. this.data //访问实例变量
请看如下代码(不加this)
public class Date {
int year; //年
int month; //月
int day; //日
//带三个参数的构造方法
public Date(int year, int month, int day) {
year = year;
month = month;
day = day;
}
public void print() {
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date date = new Date(2024, 1, 1);
date.print();
}
}
预期结果是2024-1-1
实际运行结果:
加上this,代码如下:
public class Date {
int year; //年
int month; //月
int day; //日
//带三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void print() {
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date date = new Date(2024, 1, 1);
date.print();
}
}
运行结果:
当局部变量和实例变量同名时加上this。
2.this.function()
这种写法是指在实例方法当中使用this调用另一个实例方法。 请看如下代码:
public class Date {
int year; //年
int month; //月
int day; //日
//带三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void print1() {
this.print2();
}
public void print2() {
System.out.println("this.print2()访问到我");
}
public static void main(String[] args) {
Date date = new Date(2024, 1, 1);
date.print1();
}
}
运行结果:
3. this(参数)
这种是指在构造方法当中使用this调用本类当中其他的构造方法。
1:this(参数)必要放在构造方法的第一行
2:不能环回调用
3:这种用法只能在构造方法当中
请看如下代码:
public class Date {
int year; //年
int month; //月
int day; //日
public Date() {
this(2024);
System.out.println("无参构造方法被调用");
}
public Date(int year) {
System.out.println("带一个参数的构造方法被调用");
this.year = year;
}
public Date(int year, int month) {
this(2024, 6, 1);
}
//带三个参数的构造方法
public Date(int year, int month, int day) {
}
public void print1() {
this.print2();
}
public void print2() {
System.out.println("this.print2()访问到我");
}
public static void main(String[] args) {
Date date = new Date();
}
}
运行结果:
环回调用编译不通过(你调用我,我又去调用你,无法结束), 请看如下代码:
this不能出现在静态方法当中,请看如下代码:
public class Date {
int year; //年
int month; //月
int day; //日
public static void method() {
System.out.println("method()被调用");
System.out.println(this);
}
public static void main(String[] args) {
Date.method();
}
}
运行结果:
原因:因为static修饰的方法是静态方法,它不依赖于对象,属于类,直接通过类名访问,在类加载阶段完成;static方法执行的过程中是不需要当前对象参与的,所以在static修饰的方法中不能使用this。