this用在类内部,表示类实例本身。
this关键字是类内部当中对自己的一个引用,可以方便类中方法访问自己的属性。
java中this用法
1、当局部变量和成员变量重名的时候,在方法中使用this表示成员变量以示区分。
class Demo{ String str = "这是成员变量"; void fun(String str){ System.out.println(str); System.out.println(this.str); this.str = str; System.out.println(this.str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
分析:上面的类Demo中有一个成员变量str和一个局部变量str(类方法中的形式参数),很显然局部变量和成员变量重名,这个时候一般在方法中直接使用str实际上是使用局部变量str,对成员变量str没有任何影响,此时如果需要对成员变量做点什么,就必须使用this关键字。
有个问题,如果方法中没有str,那么在方法中使用成员变量str会是什么情况呢?实际上是方法内的所有操作都是针对成员变量str的。java编程思想的84页中部有这样一句话:如果在方法内部调用同一个类的另一个方法,就不必使用this。同样,在一个方法中如果没有局部变量和成员变量同名,那么在这个方法中使用成员变量也不必使用this,可以运行下面的代码看看。
class Demo{ String str = "这是成员变量"; void fun(String str1){ System.out.println(str1); System.out.println(str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
2、this关键字把当前对象传递给其他方法
这里有个很经典的例子,就是java编程思想的85页的例子。我们拿出来仔细研究。
class Person{ public void eat(Apple apple){ Apple peeled = apple.getPeeled(); System.out.println("Yummy"); } } class Peeler{ static Apple peel(Apple apple){ //....remove peel return apple; } } class Apple{ Apple getPeeled(){ return Peeler.peel(this); } } public class This{ public static void main(String args[]){ new Person().eat(new Apple()); } }
这是我自己的认识,也许不正确,看看书中是怎样说的:Apple需要调用Peeler.peel()方法,他是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作(也许是因为该外部方法要应用于许多不同的类,而你却不想重复这些代码)。为了将其自身传递给外部方法,必须使用this关键字。
分析:设想一个场景,假如各种水果去皮的工作都是一样的,只要给我水果,我都按同样的方法去皮。那么结合上面的例子,传进来一个水果,我们吃之前getPeeled(),必须将此水果作为参数传递给外部的peel(),用this来代表自身传递给外部方法。
3、当需要返回当前对象的引用时,就常常在方法写return this;
这种做法的好处是:当你使用一个对象调用该方法,该方法返回的是经过修改后的对象,且又能使用该对象做其他的操作。因此很容易对一个对象进行多次操作。
public class This{ int i = 0; This increment(){ i += 2; return this; } void print(){ System.out.println("i = " + i); } public static void main(String args[]){ This x = new This(); x.increment().increment().print(); } }
结果为:
4
4、在构造器中调用构造器需要使用this
一个类有许多构造函数,有时候想在一个构造函数中调用其他构造函数,以避免代码重复,可以使用this关键字。在java编程思想中有这样一段话:通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有不同的含义。这将产生对符合此参数列表的某个构造器的明确调用;这样调用其他构造函数就有了直接的途径。
仔细分析:
从主函数开始,new Flower()会在内存分配空间,初始化对象,初始化对象是调用构造函数,这里没有写任何参数,当然是调用默认构造函数,就是那个无参的构函数。
这个无参的构造函数的第一行代码就是this("hi",122);这里的意思是该无参构造函数又去调用带两个参数的构造函数,来到带两个参数的构造函数,第一行代码是this(s);这行代码自动匹配带一个参数的构造函数,发现Flower(String ss)这个比较匹配,都是String类型的参数。
然后调用了带有一个String类型参数的构造函数,打印:只有String类型的参数的构造函数 s = hi
;然后回到上一级调用函数,就是带有两个参数的构造函数,打印输出:有String和int类型的参数的构造函数
;再回到上一级,就是无参构造函数,打印:默认构造函数
。
此时构造函数已经初始化完成新建的对象,最后在主函数的最后一行代码中打印:petalCount=122 s=hi
。
画个图看得更明白。
有几点要注意:
1,this只可以调用一个构造器,在一个构造器中不能同时调用两个构造器;
2,必须将你所调用的构造器放在最开始的位置,这也解释了为什么不能在一个构造函数中调用两个构造器,那第二个势必不在最开始位置。
3,本例中在带有两个参数的构造函数中可以用this调用其他任意一个只有一个参数的构造函数,这取决你自己,随便调哪一个都可以。
4,在构造函数之外的方法内不能使用this调用构造函数。代码里面注释的都不能正确编译。
this总结
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
4、很明显this不能用在static方法中,因为this指代当前对象,而static则无对象之说。
php中文网,大量的免费Java入门教程,欢迎在线学习!
以上是java中this是什么意思?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文解释了用于构建分布式应用程序的Java的远程方法调用(RMI)。 它详细介绍了接口定义,实现,注册表设置和客户端调用,以解决网络问题和安全性等挑战。

本文详细介绍了用于网络通信的Java的套接字API,涵盖了客户服务器设置,数据处理和关键考虑因素,例如资源管理,错误处理和安全性。 它还探索了性能优化技术,我

本文详细介绍了创建自定义Java网络协议。 它涵盖协议定义(数据结构,框架,错误处理,版本控制),实现(使用插座),数据序列化和最佳实践(效率,安全性,维护


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver CS6
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具