Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java之路:this关键字的用法,希望能够帮助你!!!。
(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象。
最经常使用this关键字的情况,是在对象的一个属性被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的属性,如下:
class Person {
private String name;
private int age;
public Person(String name, int age) {
// 局部变量name,age把Person类的属性屏蔽
this.name = name;
this.age = age;
}
}
(2)this只能在方法内部使用,表示对“调用方法的那个对象”的引用。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this引用会自动应用于同一类中的其他方法。
如下:
public class Apricot {
void pick() {
}
void pit() {
pick();
}
}
在pit()内部,你可以写this.pick(),但无此必要。编译器能帮你自动添加。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。
注:有些人执意将this放在每一个方法调用和字段引用前,认为这样“更清楚更明确”。但是造成别这样做。我们使用高级语言的原因之一就是它们能帮我们做一些事情。要是你把this放在一些没必要的地方,就会使读你程序的人不知所措,因为别人写的代码不会到处用到this。人们期望只在必要处使用this。遵循一种一致而直观的编程风格能节省时间和金钱。
(3)this不能用于静态方法。main方法也是静态的,所以this也不能用于main方法。
Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成,而this指代的是当前的对象。
在方法中定义使用的this关键字,它的值是当前对象的引用。也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.。
而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象。如果使用的是类来调用而不是对象,则this就无法指向合适的对象。所以static 修饰的方法中不能使用this。
(4)可以使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。并且,除了构造器之外,编译器禁止在其他任何方法中调用构造器。
package this_constructor;
class Person {
String name;
int age;
public Person() {
System.out.println("Person() constructor!");
}
public Person(String name, int age) {
this(); // 调用本类中无参构造方法
this.name = name;
this.age = age;
System.out.println("Person(String name, int age) constructor!");
}
}
public class ThisConstructor {
public static void main(String[] args) {
{
new Person("小光", 25);
}
}
}
【结果】
再看下例:
public class Rectangle {
private int x, y;
private int width, height;
public Rectangle() {
this(0, 0, 0, 0); // 调用当前对象带有四个参数的构造器
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
...
}
有的读者经常会有这样的疑问,如果我把this()调用无参构造方法的位置任意调换,那不就可以在任何时候都可以调用构造方法了么?实际上这样理解是错误的。构造方法是在实例化一个对象时被自动调用的,也就是说在类中的所有方法里,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在类中。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
下一篇
已是最新文章