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;
    }
}

 

posted @ 2020-09-10 16:26  裴敏儿  阅读(186)  评论(0编辑  收藏  举报