Java学习——this关键字

Java的this关键字


this关键字在Java中的用处

一. this调用本类属性

用法:this.属性名

作用:明确表示调用类中的同名属性

class Person{
    private String name;
    private int age;
    public Person(String name){
        name = name;
    }
    public String getName(){
        return this.name;
    }
}
public class Test{
    public static void main(String[] args) {
        Person person1 = new Person("李四");
        System.out.println("姓名" + person1.getName());
    }
}

上面的代码输出的是 姓名null,“李四”并没有赋给name。实际上当类中属性和形式参数同名时name=name只是形式参数之间的赋值,和类的属性无关。当参数与类中属性同名时,类中属性无法被正确赋值。此时我们加上this关键字便可以正 确给对象属性赋值,即this.name = name.

只要在类中方法访问类中属性,一定要加this关键字

二. this调用本类方法

this调用本类方法有两种情况

a.调用普通方法  用法-----this.方法名称(参数)

b.调用构造方法  用法-----this(参数)

a.this调用本类方法

扫描二维码关注公众号,回复: 3686849 查看本文章
class Person{
    private String name;
    private int age;
    public Person(String name){
        this.name = name;
        this.print();
    }
    public void print(){
        System.out.println(this.name);
    }
}
public class Test{
    public static void main(String[] args) {
        Person person1 = new Person("李四");
    }
}//输出 李四

虽然调用本类普通方法不需要加this也可以正常调用。但强烈建议加上,加上this的目的可以区分方法的定义来源 (在继承中有用)
 

b.this调用构造方法

Java中用this调用构造方法主要用于构造方法的相互调用

    public Person(){
        System.out.println("产生一个新的Person对象");
    }
    public Person(String name){
        this();
        this.name = name;
    }
    public Person(String name,int age){
        this(name);
        this.age = age;
    }

在Java中3个构造方法可以这样写,这样每产生一个对象都会调用一次无参构造方法,有些重复操作我们可以写在无参构造方法中,无需在每一个构造方法中都写一遍,能有效减少代码量.

使用this调用构造方法时请注意:
1. this调用构造方法的语句必须在构造方法首行(否在编译期间报错)
2. 使用this调用构造方法时,要留有出口,不可以构成环(如果构成环则编译时会报错,错误为递归构造器调用)

三. this表示当前对象

class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
    public void compare(Person p){
        Person p1 = this;//表示当前调用方法的对象,在此程序中为person1
        Person p2 = p;
        if(p1.name==p2.name)
            System.out.println("两个对象name相同");
        else {
            System.out.println("两个对象name不相同");
        }
    }
}
public class Test{
    public static void main(String[] args) {
        Person person1 = new Person("张三");
        Person person2 = new Person("张三");
        person1.compare(person2);
    }
}
//输出 两个对象name相同

注意这个比较函数,一般比较函数需要2个参数,但Java中只要对象调用了本类中的方法,这个this就表示当前执行的对象,这样我们就获得了比较参数的一个参数,只要传入另一个参数就可以完成比较.

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83153216