java 中this关键词的使用

来源:互联网 发布:海贼王启航 淘宝号 编辑:程序博客网 时间:2024/04/29 21:45

this关键词在java使用地比较频繁,对于大多数初学者而言,this让人很烦恼,但它却又非常重要。

现在先说下this关键词的应用。this关键词主要有三个应用,1.引用成员变量,2.调用构造器(构造方法),3.返回当前对象的引用。

一、引用成员变量

引用成员变量这一用法,在构造函数中可以经常看到。如下面一个例子:
String test1 = "1";String test2 = "2";Test1(String test1,String test2){System.out.println("赋值之前:"+this.test1);System.out.println("赋值之前:"+this.test2);this.test1 = test1;this.test2 = test2;System.out.println("赋值之后:"+this.test1);System.out.println("赋值之后:"+this.test2);}public static void main(String[] args) {Test1 t = new Test1("a","b"); }
输出的结果:

可以看到,this.test1指向的是类的成员变量,而不是构造方法中的形式参数。在实际应用中,例子中的两个成员变量在定义时是没有赋值的,而是通过构造函数初始化成员变量。而使用this关键词也可以将成员变量与形式参数很好的区分开来 。

二、调用构造方法

调用构造方法,一般是指在同一个类中一个构造方法调用其他构造方法。一个类可以有多个构造方法,有时因为功能需要,就需要构造方法之间的相互调用。这个可以用this来实现。
看如下例子:
Test1(){this("e");}Test1(String a,int b){System.out.println(a+""+b);}Test1(String a){this("abc",123);}public static void main(String[] args) {Test1 t = new Test1();}
输出的结果是: abc 123 。
当new一个Test1的时候,就会执行其无参构造方法,在这个无参构造方法中,调用了this("e"),这样,编译器会直接找到符合只有一个形式参数且类型相同的构造方法,继而再次调用this("abc",123),同理,找到符合条件的构造方法后,就输出最终结果。当然,构造方法中的参数类型也必须一致。
需要注意的是,只能在构造方法中使用this调用其他构造方法,其他任何方法都不可以调用。另外,同一个构造方法中只能用一个this,并且对其他构造方法的调用的代码必须写在代码块的第一行,比如,在this("e")的前面再添加一行,就会报错。

三、返回当前对象的引用

这个是最常用的,而且我个人觉得,前面两个都是基于这点而使用的。比如第一个应用,引用成员变量。当new一个对象时,完全可以用对象的引用来代替this来调用成员变量。
先看下面一个例子:
String test;public  Test1 demo(String test){this.test = test;System.out.println(test);return this;}public static void main(String[] args) {Test1 t = new Test1();t.demo("456").demo("789");}

在demo方法中,最后返回的是this.而这个this所代表的就是当前对象的引用,即t.因此,在主函数中的t也就可以不断重复的调用demo方法。
另一个例子,就是重写equals()方法的实现中也有用到this。
public boolean equals(Object obj){……省略……if(this==obj)return true;……省略……}
这个this所指的也就是当前对象的引用。
另外其实在内部类中也会有用到this的这个功能。
其实,this不仅可以引用成员变量,同时也可以引用成员方法。但是一般不会在一个方法中写this.xxx()。因为,这个this编译器会自动添加上去。另外,之所以不使用this来引用成员变量是出于对于代码观赏性,因为并不是所有人都喜欢到处用this,如果随意写this的话,可能还会引起其他人的迷惑。

最后,希望写的这点东西对大家有帮助。



原创粉丝点击