码迷,mamicode.com
首页 > 编程语言 > 详细

Java this关键字

时间:2017-01-03 18:37:22      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:size   string   code   创建   void   int   name   测试   属性   

this 关键字有三个应用:
  1.this调用本类中的属性,也就是类中的成员变量
  2.this调用本类中的其他方法
  3.this调用本类中的其他构造方法,调用时要放在构造方法的首行

来看下面这段代码:
public String name;

public void showName(String name) {
    System.out.println(name);
}

上面的代码中有个叫name的成员变量,也有个同样叫name的方法参数。那么showName方法会输出参数的name还是成员变量name呢?

测试代码:

Foo foo = new Foo();
foo.name = "张三";
foo.showName("李四");

运行结果:

李四

运行结果显示答案是会输出参数的name,原因是Java语法获取变量的时候采取的是就近原则所以name代表的是离它最近的参数name。如果想要输出成员变量name怎么办,把参数名name改了吗?那又得多想一个变量名多麻烦啊。还好Java提供了this关键字可以引用类的对象。


把上面的代码改成:

public String name;

public void showName(String name) {
    System.out.println("我是方法参数:" + name);
    System.out.println("我是类的属性:" + this.name);
}

运行结果:

我是方法参数:李四
我是类的属性:张三

可以看出this关键字代表调用改方法的对象,此时相当于对象foo。

再来看一个例子。

public Foo returnThis() {
    return this;
}

public Foo getInstance() {
    return new Foo();
}

测试代码:

Foo foo = new Foo();

Foo foo2 = foo.returnThis();
Foo foo3 = foo.getInstance();
System.out.println("foo和foo2是同一对象吗? --> " + (foo == foo2));
System.out.println("foo和foo3是同一对象吗? --> " + (foo == foo3));

运行结果:

foo和foo2是同一对象吗? --> true
foo和foo3是同一对象吗? --> false

这个例子很明确的说明了“this关键字代表调用改方法的对象”,该例子中return this返回的是调用该方法的对象也就是foo,所以foo2和foo指向的是同一对象。而 new Foo是创建一个新的Foo对象。所以foo3和foo并不指向同一对象。

 

 

Java this关键字

标签:size   string   code   创建   void   int   name   测试   属性   

原文地址:http://www.cnblogs.com/Zombie-Xian/p/6245543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!