全面认识this及其使用方法

本文详细介绍了Java中的this关键字,包括它的三种主要用法:引用当前对象、访问构造方法和访问成员方法。通过实例演示了this如何在方法中接收当前对象信息,避免命名冲突,并讲解了构造方法的概念。此外,还强调了在特定情况下使用this的必要性,以确保代码的正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

储备知识

我们都知道,Java中的方法与C语言中的函数类似,由返回值,方法名,参数,方法体,不同的是Java的方法是包含在类中的,并且还多了一个访问限制修饰符,不过这和this的使用关系不大,我们暂时不关心。我们需要了解的是,在Java调用方法时,传参不仅仅是你自己写入的参数,还传入了当前对象的信息,在方法中由this接收,文字描述过于抽象,接下来我会用实例来演示。

class Person {
    private String name;
    private int age;
    public void set(String name1,int age1) {
        name = name1;
        age = age1;
    }
    public void show() {
        System.out.println(name);
        System.out.println(age);
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.set("dpy",20);
        person1.show();

		Person person2 = new Person();
		person2.set("dps",19);
        person2.show();
		
		Person person3 = new Person();
		person3.set("dph",18);
        person3.show();
    }
}

这上面的例子实际上就是创建了一个类,用来描述人,成员变量为name和age,还有两个成员方法分别用于成员变量的赋值与输出。到这里大家可能有所疑问,this在哪里被使用了呢?接下来我们重点关注一下主方法main中new了三个对象person1,person2,person3,在用对象调用Person类中的方法set时传入了两个参数,重点来了,在上面我们提到了在Java中会将对象的信息传给方法,让系统知道这是当前对象是person1,person2还是person3。而在方法中用this来接收。也就是说类中的方法还有一个隐藏的参数,实际上系统来看是这样的,如下:

public void set(**Person this**,String name1,int age1) {
        name = name1;
        age = age1;
    }

this的类型就是所在类的名字,this就相当于当前对象,假如现在的对象是person1,代码应该是:

public void set(**Person this**,String name1,int age1) {
        person1.name = name1;
        person1.age = age1;
    }

我们需要让明确我们现在赋值的是具体是哪个对象,所以在写代码的时候需要写清楚是哪个对象,因为this接受了对象person1,所以在实际写代码的时候不需要像上面那样写,将person1改为this即可,如下:

public void set(**Person this**,String name1,int age1) {
        this.name = name1;
        this.age = age1;
    }

好了,现在我们明白了this是做什么的了,但是有人可能会问,可是我之前写代码的时候没有加this并没有报错呀,程序还是正常运行的,这是为什么呢,下面我会做出解释。正常来说,在一些情况下不用this的确是不会出错,但是在一些特殊情况下不行,例如:

class Person {
    private String name;
    private int age;
    public void set(String **name**,int **age**) {
        name = name;
        age = age;
    }
    public void show() {
        System.out.println(name);
        System.out.println(age);
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.set("dpy",20);
        person1.show();
    }
}

注意看此时set方法下的参数,与成员变量相同,这时候程序就无法如预期那样运行了,由于局部变量优先的缘故,参数与成员变量同名,在方法体中,参数优先,所以相当于自己给自己赋值,而成员变量并没由修改,还是默认初始值0。在这时候我们就需要加上this,像:

class Person {
    private String name;
    private int age;
    public void set(String **name**,int **age**) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println(name);
        System.out.println(age);
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.set("dpy",20);
        person1.show();
    }
}

这样程序即可正常运行了,所以在我们平时写代码的时候最好习惯性的加上this,以免遇上以上的情况。

this的三种用法

this引用当前对象

这个用法就是我们上面所讲的给当前对象赋值,这里我们就不再过多的赘述。

this访问构造方法

何为构造方法

在学习这种用法之前,我们需要了解什么是构造方法。先来看构造方法的定义,构造方法非常特殊,这个方法没有返回值,方法名和类名是一致的。如果你在创建的类中没有写任何的构造方法,此时Java会默认提供一个构造函数,这个构造函数是不带参数的。如果自己写了,就会调用自己的,且只会调用一次,不管你写的构造方法是怎么样的,Java都不再默认提供构造函数。例如Person这个类的默认构造函数为:

public Person() {

}

自己写的构造函数就是不同只是参数不同罢了,构造函数是在new一个新对象时会自动运行的。(这里简略介绍了构造函数,不明白的可以看看我的另一篇博客或者自行学习)

ok,明白了什么是构造函数,我们就可以学习如何用this访问构造方法了。

public Person() {
	this("dpy",20)
}
public Person(string a,int b) {

}

如上,当你在类中写了两个及两个以上构造函数的时候,上面的构造函数可以通过this访问到下面的构造函数,需要注意的是参数对应,反之,下面的构造函数也可以通过this访问上面的构造函数。(这里还涉及了方法的重载的知识,不明白的可以看看我的另一篇博客或者自行学习)

this访问成员方法

与访问构造函数相似,既一个成员方法体中可以用this访问另一个成员方法,如下:

public void set(String **name**,int **age**) {
        this.name = name;
        this.age = age;
        this.show();
    }
public void show() {
        System.out.println(name);
        System.out.println(age);
    }

至此,我们就了解清楚了何为this,如何使用this。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值