前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java之路:this关键字的用法

Java之路:this关键字的用法

作者头像
全栈程序员站长
发布2022-07-02 16:15:55
1620
发布2022-07-02 16:15:55
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象。

最经常使用this关键字的情况,是在对象的一个属性被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的属性,如下:

代码语言:javascript
复制
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引用会自动应用于同一类中的其他方法。

如下:

代码语言:javascript
复制
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关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。并且,除了构造器之外,编译器禁止在其他任何方法中调用构造器。

代码语言:javascript
复制
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);
		}
	}
}

【结果】

在这里插入图片描述
在这里插入图片描述

再看下例:

代码语言:javascript
复制
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调用构造方法必须也只能放在类中。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148333.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档