this关键字

  • 作用:出现在成员方法,构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法。
  • this出现在 有参数构造器 中的用法    (this.成员变量 = 局部变量)
  • this出现在 成员方法 中的用法           (this.成员变量   指明此时的变量是成员变量)

1、this关键字的作用?

  • 代表当前对象的地址
  • 可以区别 成员变量 和 局部变量
  • this修饰的变量用于指代成员变量
  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

2、this关键字在构造器中、成员方法中可以做什么?

  • 可以用于访问当前对象的成员变量

3、this的本质

  • 代表 所在 方法 调用者 的 地址值
  • 代表所在类的对象引用
  • 方法被哪个对象调用,this就代表哪个对象

4、什么时候使用this呢?

  • 解决局部变量隐藏成员变量

5、在本类的成员方法中,访问本类的成员变量

public class Fu {
    int num = 30;
}
class Zi extends Fu {
    int num = 20;

    public void showNum() {
        int num = 10;
        System.out.println(num);//局部变量  10
        System.out.println(this.num);//本类中的成员变量   20
        System.out.println(super.num);//父类中的成员变量  30
    }

    public static void main(String[] args) {
        new Zi().showNum();
    }
}

6、在本类的成员方法中,访问本类的另一个成员方法

public class Fu {
  
}
class Zi extends Fu {

    public void methodA() {
        System.out.println("AAA");
    }

    public void methodB() {
        methodA();
        this.methodA();//this可以省略
        System.out.println("BBB");
    }
}

7、在本类的构造方法中,访问本类的另一个构造方法

  • this(. . .)调用也必须是构造方法的第一个语句,唯一一个
  • this(. . .)语句必须在构造器的首行,第一行(Call to 'this()' must be first statement in constructor body)
  • super() 和 this() 两种构造调用,不能同时使用
public class Fu {
    public Fu() {
        System.out.println("super()过来的");
    }
}
class Zi extends Fu {

    public Zi() {
        this(12);//本类的无参构造,调用本类的有参构造
    }

    public Zi(int n) {
        this(1, 2);
    }

    public Zi(int n, int m) {
//            super();  省略不写,默认赠送
    }
}

this关键字_第1张图片

  • 在继承关系中,如果new的是子类对象,无论是多态还是 Son son = new Son(),this在父类构造器中指代的都是子类对象,因为 new Son,而不是父类对象,所以调用的是子类重写的print方法,但是如果 this.x ,调用的就是父类的属性 x,这里调用方法和属性的规律,就相当于多态的调用规则,如果子类有重写的方法,就调用子类重写的,如果没有重写,还是会调用父类的方法
  • 在继承关系中,如果new的是子类对象,无论是多态还是 Son son = new Son(),this在父类构造器中指代的都是子类对象,因为 new Son,而不是父类对象,但是调用属性(this.x)都是调用父类的属性,而不是子类的,相当于多态调用属性的规则

你可能感兴趣的:(#,关键字,java,开发语言,this,关键字)