java之this关键字
/**
* 1.this 是一个关键字
* 2.this是什么?在内存方面是怎样的?
* 一个对象一个this。
* this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身
* 所以,严格意义上来说,this代表的就是"当前对象"
* this存储在堆内存中
* 3.this使用在实例方法中,谁调用这个实例方法,this就是谁,所以this代表的是:当前对象。
* 4.this除了可以使用在实例方法中,还可以用在构造方法中。新语法:
* 通过当前的构造方法去调用另一个本类的构造方法,可以使用以下的语法格式
this(实际参数列表)
* */
public class ThisTest01 { public static void main(String[] args) { Customer c1 = new Customer("张三"); c1.shopping(); Customer c2 = new Customer("李四"); c2.shopping(); } } //顾客类 class Customer{ //属性,实例变量 String name; //构造方法 public Customer() { } public Customer(String s) { this.name = s; } //顾客购物,实例方法 public void shopping(){ //这里this是谁。谁来调用这个方法,this就是谁, // c1调用这个方法,this就是c1, // c2调用这个方法,this就是c2, //那为什么name前没有c1或者c2.因为找不到c1,c2,但是this代表就是当前对象,this是可以省略不写的 //this. 省略的话,还是默认访问"当前对象"的name System.out.println(this.name+"正在购物"); } //静态方法 public static void doSome(){ //this代表当前对象,而静态方法的调用不需要对象,矛盾了 // System.out.println(this); } }
思考下面的:静态方法m1可以访问实例变量name吗?
this什么时候不可以省略:
在实例方法中,或者构造方法中,为了区分局部变量和实例变量,这种情况下不可以省略。
因为,java语法的接近原则,会认为下面的name就是name,而用了this以后,才会给实例变量赋值。
class Customer{
//属性,实例变量
String name;
//构造方法
public Customer() {
}
//不可以省略,就近原则
public Customer(String name) {
this.name = name;
}
}
-------------------------------------
class Work{
//实例变量 必须先new对象,通过"引用."来访问
private String name = "zhangsan";
//return this.name = name
// 这个可以省略this,是因为不需要区分局部变量和实例变量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.this除了可以使用在实例方法中,还可以用在构造方法中。新语法:
* 通过当前的构造方法去调用另一个本类的构造方法,可以使用以下的语法格式
this(实际参数列表)
class Work{ //实例变量 必须先new对象,通过"引用."来访问 private String name; public Work(){ this("xiaomin");//必须是第一行,不可以前面有语句 } public Work(String name){ this.name = name; } }