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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【数据库】谈谈group by[通俗易懂]

    【数据库】谈谈group by[通俗易懂]【数据库】谈谈group by

    2022年4月25日
    79
  • Hadoop生态系统全面介绍

    Hadoop生态系统全面介绍Hadoop 作为大数据的分布式计算框架 发展到今天已经建立起了很完善的生态 本文将一一介绍基于 Hadoop 生态的一系列框架和组件 Flume 简介 Flume 是一个分布式 高可用的服务 用于高效收集 聚合和移动大量日志数据 作用 Flume 主要承载的作用是收集各个数据源的事件或日志数据 然后将其 Sink 到数据库架构 Flume 的实现架构原理也非常简单 通过 Agent 代理来实现数据的收集 一个 Agent 包含了 Source channel Sink 三个组件 Source 采集的数据来源

    2025年8月22日
    3
  • xpath爬取美女图片

    xpath爬取美女图片尝试了一下用xpath爬取图集谷上面的美女图片,这次选择的是阿朱小姐姐,下面详细介绍如何爬取该网站中阿朱小姐姐的全部套图。网址如下:https://www.tujigu.com/t/437/

    2022年7月27日
    7
  • Sigar 编译笔记「建议收藏」

    Sigar 编译笔记「建议收藏」在win7上面编译Sigar,由于开发环境及编译器版本不同,出现了许多问题。开发环境:win7,CMAKE3.11.0-rc2,jdk1.8,perl5,ant1.10.1,vs20151.编译之前要运行%vs_root%\VC\vcvarsall.batamd64,设置vs的编译依赖环境,64位的windows一定要加上参数amd642.vs2015需要根据https…

    2025年8月3日
    4
  • 实用工具系列 – Xshell安装下载与使用「建议收藏」

    实用工具系列 – Xshell安装下载与使用「建议收藏」一、介绍二、下载三、安装四、使用

    2025年10月17日
    6
  • Hostapd Android[通俗易懂]

    Hostapd Android[通俗易懂]HostapdAndroidhttps://github.com/lnmcc/hostapd-android http://www.omitol.com/archives/109.html http://forum.xda-developers.com/showthread.php?t=1988735 http://droidmodderx.com/galaxyn…

    2022年5月21日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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