2022-03-24
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(); } }结果为:
44、在构造器中调用构造器需要使用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则无对象之说。
海岛奇兵九游账号登录版下载v57.1.1 安卓9游版
策略塔防 456.1M
下载奇迹觉醒手游官方版下载v16.3.0 安卓正版
其它手游 1.38G
下载全民奇迹2官方版下载v14.0.0 安卓最新版
其它手游 1.96G
下载光遇虫虫助手版下载v0.13.9 安卓版
休闲益智 1.77G
下载剑侠世界3手游官方正版下载v1.6.24425 安卓版
角色扮演 1.84G
下载汽车城宝宝巴士游戏(改名为宝宝汽车城市)下载v9.86.00.01 安卓版
其它手游 169.3M
下载宝宝汽车城市游戏下载v9.86.00.01 安卓最新版
其它手游 169.3M
下载fifaonline4官方移动端最新版本(足球在线4移动版)下载v1.2503.0005 安卓版
体育运动 160.0M
下载腾讯欢乐麻将全集ios版下载v1.0.4 iphone官方版
下载
龙之谷2手游官方版下载v1.53.2 安卓最新版
下载
宝宝英语冒险最新版(更名宝宝字母小镇)下载v9.86.00.00 安卓版
下载
宝宝巴士奇妙恐龙世界游戏下载v9.86.00.00 安卓最新版
下载
派对主题乐园游戏下载v9.86.00.00 安卓版
下载
节奏大师游戏下载v2.9.13.29145 手机安卓最新版本
下载
神奇数字宝宝app下载v9.86.00.00 安卓版
下载
奇妙玩具修理店无限金币版下载v9.83.00.00 安卓最新版
下载