Java之路:this关键字的用法

Java之路:this关键字的用法(1)普通方法中,this总是指向调用该方法的对象。(2)构造方法中,this总是指向正要初始化的对象。(3)this可以让类中的一个方法,访问该类的另一个方法或属性。(4)可以使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。(5)this不能用于static方法。用this调用构造方法packagethis_const…

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

(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调用构造方法必须也只能放在类中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • qcustomplot 性能_cpu性能提升工具

    qcustomplot 性能_cpu性能提升工具Plot性能提升QCustomPlot采用了大量的技术比如自适应采样和文本对象缓存为了减少replot的时间。然而一些特性比如半透明的填充,反锯齿和粗线条都可能导致低效率。如果你在你的程序中注意到了这些。这有一些提示关于如何跳高Replot的性能。大部分时间耗费在绘图函数上尤其是绘制高密度的图形和其他图。为了最大性能思考下面几点:使用Qt4.8.0及以上的版本,性能将会有双倍或

  • pycharm2021专业版永久激活码【在线破解激活】

    pycharm2021专业版永久激活码【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题参考文献:http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的header)http://www.baike.com/wiki/Google+Chrome+Frame(googlechromeframe介绍)http://www.cnbl

  • 标准网页两侧浮动广告代码,支持FF及IE

    标准网页两侧浮动广告代码,支持FF及IE点击这里使用RSS订阅本Blog:网页两侧浮动广告代码经测试支持IE、Firefox等浏览器符合标准的正常工作的对联广告lastScrollY=0;functionheartBeat(){vardiffY;if(doc

  • vim命令搜索_linux打开vim编辑器

    vim命令搜索_linux打开vim编辑器尽管目前我们已经涉及Vim的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的Vim教程系列,本文我们将讨论Vim提供的多种搜索技术。不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在Ubuntu14.04,Vim7.4下测试的。Vim中的基础搜索操作当你在Vim中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按…

  • 一阶倒立摆分析_倒立摆受力分析

    一阶倒立摆分析_倒立摆受力分析摆的运动是两种运动的叠加:1.平动,包含x方向和y方向。2.转动,转轴为质心。尽管物理上的转轴是其端点,但这个端点同时也是摆的受力点。在端点(非中心)施加垂直于摆臂的力,摆将绕其质心转动。  因为摆的重力作用于其转轴(质心),因此摆自身的重力对摆不施加力矩。这可以算作将质心作为转轴来分析的一个优势。   …

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号