浅谈 Java 中 this 的使用

原创 2004年09月14日 16:38:00
谈谈 Java 中 this 的使用

1. this是指当前对象自己。
当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:

public class A {

String s = "Hello";

public A(String s) {
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}

public static void main(String[] args) {
new A("HelloWorld!");
}
}

运行结果:

s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!

在这个例子中,构造函数A中,参数s与类A的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类A的变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对参数s进行打印结果;后面两行分别是对对象A的变量s进行操作前后的打印结果。

2. 把this作为参数传递
当你要把自己作为参数传递给别的对象时,也可以用this。如:

public class A {
public A() {
new B(this).print();
}

public void print() {
System.out.println("Hello from A!");
}
}

public 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的构造函数。

3. 注意匿名类和内部类中的中的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及应用

给初学者之一:浅谈java及应用   学java不知不觉也已经三年了, 从不知java为何物到现在一个小小的j2ee项目经理,虽说不上此道高手,大概也算有点斤两了吧。每次上网,泡bbs逛论坛,没少去...
  • u012402926
  • u012402926
  • 2016年05月04日 17:54
  • 134

浅谈java(一)

一.java的历史和发展前景       java从产生到现在已经有20多年的历史了。自其出现以来就以惊人的速度发展,使用java开发的人数不胜数。       Java 语 言 有 着 广 泛 ...
  • windy_03271
  • windy_03271
  • 2013年03月27日 17:45
  • 342

浅谈Java并发编程系列(六) —— 线程池的使用

线程池的作用 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的资源浪费。 提高响应速度。当任务到达时,不需要等到线程创建就能立即执行。 方便管理线程。线程是稀缺资源,如果无限制地创建,不...
  • codershamo
  • codershamo
  • 2016年07月11日 21:13
  • 1016

浅谈Servlet的本质

前言:一个Servlet程序其实就是一个实现了Java特殊接口的类,它由支持Servlet(具有Servlet引擎)的WEB服务器调用和启动运行。一个Servlet程序负责处理它对应的一个或者多个UR...
  • PaoPaoJiWei
  • PaoPaoJiWei
  • 2016年04月08日 17:26
  • 581

浅谈Java并发编程

浅谈Java并发编程(一)作为一个工作经验还不是很足的小程序员,第一次写博客,不足之处还希望业内前辈多多指点。以前接触并发编程的机会还是挺少的,但是进入了一个大平台,用户量很可观,所以在程序处理是并发...
  • missY_H
  • missY_H
  • 2017年05月01日 23:03
  • 159

浅谈C语言与JAVA语言

C语言是我第一门编程语言。java是我的第二门编程语言。
  • java_M_du
  • java_M_du
  • 2017年06月19日 00:45
  • 158

红黑树深入剖析及Java实现

红黑树深入剖析及Java实现 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary Search Tree,...
  • u014352080
  • u014352080
  • 2016年12月09日 09:00
  • 2427

浅谈人工智能

历史      各个文明中都有杰出的工匠发明了自动机器来代替人类劳动,早在春秋时期鲁班就发明了世界上第一个机器人,可在空中飞翔‘三日不下’;三国时期蜀汉的诸葛亮发明了‘木牛流马’来运送战备物资,称得上...
  • oba_gaga
  • oba_gaga
  • 2016年10月09日 20:57
  • 1564

浅谈数据库设计

浅谈数据库设计 ——-目录(?)[+]第一章 需求分析设计简介设计步骤需求分析重要性实例小型电子商务网站第二章 逻辑设计E-R图设计范式概要第一范式1NF第二范式2NF第三范式3NF BC范式第三章 ...
  • CCSUXWZ
  • CCSUXWZ
  • 2017年06月21日 17:50
  • 275

浅谈JVM及原理

1、什么是JVM ? JVM, 中文名是Java虚拟机, 正如它的名字, 是一个虚拟机器,来模拟通用的物理机。 JVM是一个标准,一套规范,  规定了.class文件在其内部运行的相关标准和规范。 ...
  • weiguolong0306
  • weiguolong0306
  • 2017年03月04日 15:54
  • 2453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈 Java 中 this 的使用
举报原因:
原因补充:

(最多只允许输入30个字)