this指向当前对象的引用。
使用场景:
- 构造器中初始化属性。
- getter/setter中。
- 构造方法中。
在java的所有方法中都有两个隐式参数:this和super。
public class Student {
//静态数据
private String name;
private int id;
public Student() {
System.out.println("调用默认构造器");
}
public Student(int id) {
//通过this方法调用其他构造方法,this()语句只能放在第一句
this();
this.id = id;
}
/**
* 所有的方法中都有两个隐式参数,this和super
*
* 构造方法中,this指向正要初始化的对象
*/
public Student(String name, int id) {
//通过this方法调用构造器
this(12);
//如果没有使用this关键字,=左边的name采取就近原则,取的是行参的name,=右边的也是行参的name,这样name没有赋值
name = name;
System.out.println("不使用this关键字============");
System.out.println("这是对象的属性:"+this.name);
System.out.println("这是行参的属性:"+name);
this.name = name;
System.out.println("使用this关键字============");
System.out.println("这是对象的属性:"+this.name);
System.out.println("这是行参的属性:"+name);
}
/**
* 普通方法中,this指向调用该方法的对象
*/
public void study(){
this.name = "张三";
System.out.println(name+"在学习");
}
public void sayHello(String sname){
System.out.println(name+"向"+sname+"说:你好!");
}
public static void main(String[] args) {
Student s = new Student("张三",12);
//如果构造方法中没有使用this关键字,此处打印为null
System.out.println(s.name);
}
}
//静态数据
private String name;
private int id;
public Student() {
System.out.println("调用默认构造器");
}
public Student(int id) {
//通过this方法调用其他构造方法,this()语句只能放在第一句
this();
this.id = id;
}
/**
* 所有的方法中都有两个隐式参数,this和super
*
* 构造方法中,this指向正要初始化的对象
*/
public Student(String name, int id) {
//通过this方法调用构造器
this(12);
//如果没有使用this关键字,=左边的name采取就近原则,取的是行参的name,=右边的也是行参的name,这样name没有赋值
name = name;
System.out.println("不使用this关键字============");
System.out.println("这是对象的属性:"+this.name);
System.out.println("这是行参的属性:"+name);
this.name = name;
System.out.println("使用this关键字============");
System.out.println("这是对象的属性:"+this.name);
System.out.println("这是行参的属性:"+name);
}
/**
* 普通方法中,this指向调用该方法的对象
*/
public void study(){
this.name = "张三";
System.out.println(name+"在学习");
}
public void sayHello(String sname){
System.out.println(name+"向"+sname+"说:你好!");
}
public static void main(String[] args) {
Student s = new Student("张三",12);
//如果构造方法中没有使用this关键字,此处打印为null
System.out.println(s.name);
}
}