2014-10-08 86 views
1

当事件在Applet的init()方法中注册时,我们添加方法addTypeListener(this)了解Java中的这个关键字

但我知道关键字this引用了调用该方法的对象。所以,当我们没有创建任何applet类的对象时,this会引用什么对象? 请澄清我的疑惑。

+2

只是因为*你*没有创建类的实例并不意味着*没有*做。 – 2014-10-08 16:35:48

+0

所有构造函数完成后,将创建该对象。 'init()'不是一个构造函数,除非从一个构造函数中调用它,否则它将具有完全构造的对象。 – 2014-10-08 16:36:37

+0

+1,这实际上并不是世界上最糟糕的问题。 – Qix 2014-10-08 16:47:35

回答

1

但我知道关键字this指的是调用该方法的对象。

这并不完全正确。实际上,在实例方法的代码中,
this指向该方法被调用的对象。

所以,当我们还没有创建任何applet类的对象时,这会引用什么?

JVM已经创建了小程序的类的对象/实例(子类,是),
所以this指的是你Applet类的该实例。

+1

浏览器没有内置的JVM。 – Qix 2014-10-08 16:52:45

+0

@Qix是的,你是对的一般。 – 2014-10-08 16:54:06

+1

至少,目前没有任何浏览器:) – Qix 2014-10-08 16:54:37

-1

'这个'关键字指的是你正在工作的类的对象。 'This'关键字可用于调用该类的默认构造函数。同样,在使用继承概念时,'super'关键字用于调用继承类的默认构造函数,或者可以被称为继承/父类'对象。

+0

'super()'和'this'与默认的构造函数无关。 – 2014-10-08 16:47:05

+1

''This'关键字可以用来调用类的默认构造函数。'错误; 'this'可以在构造函数中用来调用*任何其他*构造函数。同样,'super'可以用来调用直接父类的任何构造函数。像'this'一样,'super'也可以在方法中使用,以调用方法的父版本。 – Qix 2014-10-08 16:53:53

2

this之所以没有明确创建你的Applet的一个实例是因为JRE对待Applets有一点不同。

Applets是一个特殊的类,Java实例化为您加载时。从那里开始,对象由JRE拥有,并通过这种方式与之交互。

一旦Java创建了一个applet实例,它就会调用init()代替构造函数(因为constructors cannot conform属于原型contract)。同样,当你的applet完成或页面被卸载时,Java会担心关闭你的applet。