本文主要介绍这个关键字,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。让我们和边肖一起为有需要的朋友学习吧。
Java提供了一个this关键字,它总是指向调用该方法的对象。根据出现的位置,在两种情况下,这是对象的默认引用。
1)构造函数是指构造函数正在初始化的对象。
2)在方法中引用调用该方法的对象。
这个关键字最大的作用是让一个类中的方法访问那个类中的另一个方法或实例变量。假设定义了一个Person类,这个Person对象的eat()方法需要调用其move()方法。我们做什么呢您是否应该定义以下人员类别?
公共类人员{
//定义move()方法
公共void移动(){
System.out.println(执行move()方法);
}
//定义一个eat()方法,需要借助move()方法。
public void eat(){
Person p=新人();
p . move();
System.out.println(执行eat()方法);
}
公共静态void main(String[] args) {
//创建一个人对象
Person p=新人();
//调用Person的eat()方法
p . eat();
}
}
运行结果是:
正在执行move()方法
执行eat()方法
上面的方法确实可以调用eat()方法中的move()方法,但是从main()方法中的程序可以看出创建了两个对象:一个对象是在main()方法中创建的;在eat()方法中创建一个对象。但是你真的需要创建两个对象吗?答案是否定的!因为程序调用eat()方法时,会提供一个Person对象,不需要重新创建Person对象。
所以需要在eat()方法中获取调用这个方法的对象,这个关键字可以满足这个要求。
这可以表示任何对象。当它出现在方法体中时,它所代表的对象是不确定的,但它的类型是确定的。它所代表的类型只能是当前类:只有调用这个方法时,才确定它所代表的对象:无论是谁在调用这个方法,这代表的就是谁。
将上面的Person类中的eat()方法改为这样更合适:
//定义一个eat()方法,需要借助move()方法。
public void eat(){
//使用它来引用调用eat()方法的对象
this . move();
System.out.println(执行eat()方法);
}
在上面的程序中,eat()方法需要依赖move()方法,这在现实中很常见。比如书写的方法需要握笔的方法,这种依赖就是同一个对象的两个方法之间的依赖。因此,Java允许对象的一个成员直接调用另一个成员,前缀this可以省略。也就是说,上述程序可以更改为以下形式:
public void eat(){
move();
System.out.println(执行eat()方法);
}
在另一种情况下,该关键字可以用作构造函数中的默认引用。因为构造函数是用new关键字直接调用的,而不是使用对象,所以这表示对象是由构造函数中的构造函数初始化的。例如,下面的程序:
公共类人员{
//定义一个名为age的成员变量
公共int age
//构造函数
公共人物(){
//在构造函数中定义年龄变量
int age=0;
//使用它来表示此构造函数正在初始化的对象。
//下面的代码将此构造函数正在初始化的对象的age成员变量设置为3。
this . age=3;
}
公共静态void main(String[] args) {
//用new Person()创建的对象的年龄成员变量将全部设置为3
//下面的代码输出3
System.out.println(新人()。年龄);
}
}
与普通方法类似,在大多数情况下,当访问构造函数中的其他成员变量和方法时,可以省略这个前缀。但是,如果有一个局部变量与构造函数中的成员变量同名,并且必须在构造函数中访问被覆盖的成员变量,则必须使用此前缀。如上面的程序所示。
当this作为一个对象的默认引用时,程序可以像普通引用变量一样访问this this引用,甚至可以以此作为普通方法的返回值。请参见以下程序:
公共类人员{
公共int age
公众人物成长(){
年龄;
还这个;
}
公共静态void main(String[] args) {
Person p=新人();
//可以连续调用同一个方法
p.grow()。增长()。grow();
system . out . println( p对象年龄的值为: p . age );
}
}
运行结果是:
p对象的年龄值为:3。
从上面的程序可以看出,如果把这个作为某个方法中的返回值,就可以重复调用同一个方法,从而使代码更加简洁。但是,这种方法容易模糊实际意义。比如上面的group()方法用来表示一个对象的成长,也就是年龄变量的值加1实际上不应该有返回值。
最后需要强调的是,静态成员不能直接访问非静态成员,也就是静态修饰的方法不能访问不适合静态修饰的普通方法。对于由static修饰的方法,可以使用类直接调用它。如果在由static修饰的方法中使用该关键字,则该关键字不能指向适当的对象。因此,此引用不能在静态修饰方法中使用。
以上是边肖对这个关键词的详细解释和整合。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!