1. this是指当前对象自己。

用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法。如下面这个例子中:

public class ThisDemo {
String name = "Mick"; public void print(String name) {
System.out.println("类中的属性 name=" + this.name);
System.out.println("局部传参的属性=" + name);
} public static void main(String[] args) {
ThisDemo tt = new ThisDemo();
tt.print("Orson");
}
}

2.使用this区分同名变量

成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,怎么办呢?这时候只能使用this,例如:

public class Demo {
public String name;
public int age; public Demo(String name, int age) {
this.name = name;
this.age = age;
} public void say() {
System.out.println(name + " " + age);
} public static void main(String[] args) {
Demo obj = new Demo("hdk1993", 21);
obj.say();
}
}

3.使用this调用构造函数

在构造函数中,通过this可以调用同一class中别的构造函数,如

public class Flower {
Flower(int petals) {
} Flower(String ss) {
} Flower(int petals, Sting ss) {
// petals++;调用另一个构造函数的语句必须在最起始的位置
this(petals);
// this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
}
}

值得注意的是:

(i):在构造调用另一个构造函数,调用动作必须置于最起始的位置。

(ii):不能在构造函数以外的任何函数内调用构造函数。

(iii):在一个构造函数内只能调用一个构造函数。

4.this作为函数返回值

关于返回类自身的引用,Thing in Java有个很经典的例子,通过this 这个关键字返回自身这个对象然后在一条语句里面实现多次的操作,还是贴出来。

public class ThisDemo {

	int number;

	ThisDemo increment() {

		number++;

		return this;

	}

	private void print() {

		System.out.println("number=" + number);

	}

	public static void main(String[] args) {

		ThisDemo tt = new ThisDemo();

		tt.increment().increment().increment().print();

	}

}

5.this作为参数传递

需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。例如:

public class Demo {

	public static void main(String[] args) {

		B b = new B(new A());

	}

}

class A {

	public A() {

		new B(this).print(); // 匿名对象

	}

	public void print() {

		System.out.println("Hello from A!");

	}

}

class B {

	A a;

	public B(A a) {

		this.a = a;

	}

	public void print() {

		a.print();

		System.out.println("Hello from B!");

	}

}

运行结果:
Hello from A!
Hello from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
匿名对象就是没有名字的对象。如果对象只使用一次,就可以作为匿名对象,代码中 new B(this).print(); 等价于 ( new B(this) ).print();,先通过 new B(this) 创建一个没有名字的对象,再调用它的方法。

6. 注意匿名类和内部类中的中的this。
有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:

public class A {
int i = 1; public A() {
Thread thread = new Thread() {
public void run() {
for (;;) {
A.this.run();
try {
sleep(1000);
} catch (InterruptedException ie) {
} }
}
}; // 注意这里有;
thread.start();
} public void run() {
System.out.println("i = " + i);
i++;
} public static void main(String[] args) throws Exception {
new A();
}
}

在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

Java之this详解的更多相关文章

  1. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  2. Java 序列化Serializable详解

    Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...

  3. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  4. 最新java数组的详解

    java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...

  5. JAVA IO 类库详解

    JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...

  6. 转:Java HashMap实现详解

    Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1.    HashMap概述:    HashMap是基于哈希表的M ...

  7. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

  8. 【转】 java中HashMap详解

    原文网址:http://blog.csdn.net/caihaijiang/article/details/6280251 java中HashMap详解 HashMap 和 HashSet 是 Jav ...

  9. Mac下Intellij IDea发布Java Web项目详解五 开始测试

    测试前准备工作目录 Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intell ...

  10. JAVA命令参数详解

    JAVA命令参数详解 JAVA命令详解 结构 说明 Java 和 OldJava JIT 选项 另请参阅 结构 java [ options ] class [ argument ... ] java ...

随机推荐

  1. java 集合类简单的分析1

          java中的集合类是很常见的,ArrayList,HashSet,HashMap等,现在就让我们来看下他们的各个类之间的关系图.      Collection ├List │├Linke ...

  2. rpm build error: invalid predicate

    rpm build error error message:/usr/lib/rpm/find-debuginfo.sh /usr/src/redhat/BUILD/RPMS find: invali ...

  3. linux yum install resource - epel

    首先现在如下rpm包,然后安装对应的rpm包centos5 32位epel源下载地址: www.lishiming.net/data/attachment/forum/epel-release-5-4 ...

  4. html5 之 canvas 相关知识(二)API-fillStyle

    颜色.样式和阴影 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式 定义和用法 context.fillStyle=color|gradient|pattern;//指示绘图填充色的CSS ...

  5. jQuery滚动时动态加载页面内容

    var loading = false; $(window).scroll(function(){ if((($(window).scrollTop()+$(window).height())+250 ...

  6. Part 10 AngularJS sort rows by table header

    Here is what we want to do 1. The data should be sorted when the table column header is clicked 2. T ...

  7. Android之天气APP

    做一个天气信息APP,通过读取公开发布的气象数据,提供实时天气更新,帮助用户时刻了解天气情况.通过APP可以查询到自己所处位置的天气预报,也可以通过定位系统,获取省内任意位置的气象环境信息. API接 ...

  8. SliverLight(how to show data point on the column series)

    You should know that Silverlight comes with win form drawing software is different, it has no the la ...

  9. 2015影响因子Excel版

    现在终于有影响因子2015的Excel版了,这个版本除了还包括杂志全称和缩写等基本信息还,包括中科院分区, 应该是迄今2015影响因子最奢华的版本了吧. 看了这个版本,发现中国的SCI杂志还是不少的, ...

  10. eBay 开发流程

    1[记录]注册成为eBay开发者(eBay Developers Program)+创建Sanbox Key和Production Key http://www.crifan.com/register ...