Posted on 2010-12-30 01:20
leekiang 阅读(391)
评论(0) 编辑 收藏 所属分类:
java
Static
的意义与实作方式
Class(static) field
:共用一块记忆体
class(static) method
:共用一块记忆体
instance(
非
static) field
:随着每个
instance
各有一块记忆体
instance (
非
static) method
:共用一块记忆体
instance method
为什么不是随着每个
instance
占有一块记忆体,反倒是共用一块记忆体?其实,让每个
instance method
如同
instance field
一样,随着每个
instance
占有一块记忆体,这么做当然是可以的,只是
Java
编译器和
JVM
都不这么做,因为太浪费记忆体空间了。一个
field
少则占用一个
byte
,多则占用数百
Byte
,但是
method
少则数个
byte
,多则数百
Kilo Byte
。
Mehtod
耗费的记忆体是
field
的数百倍,甚至数千倍,当然是能共用就尽量共用,比较不会消耗记忆体。既然
JVM
让一个
class
的所有
instance
共用相同的
instance method
,下面两行程式码在
instanceMethod()
内部时,如何区分是
instance1
或
instance2
?
instance1.instanceMethod();
instance2.instanceMethod();
因为编译器会帮我们在把
instance1
和
instance2
个别传入
instanceMethod()
中当作第一个参数。也就是说,任何
instance method
参数的实际个数都会比表面上多一个,这个多出来的参数是由
Java
编译器帮我们加上去的,用来代表对应的
instance
。此参数的变数名称为
this
,也是
Java
的一个关键字(
keyword
)。
当调用某个
instance method
或使用某个
instance field
时,你必须在前面加上该
instance
的名称,如果该
instance method/field
相关的
instance
和当时程式码所在的
instance method
的
instance
指的是同一个
instance
时,该
instance
的名称就是
this
,这种情况下,你也可以选择不在前面加上「
this.
」。
然而,在某些状况下,非得在前面加上「
this.
」不可。例如,当
method
中的参数或区域变数和
instance field
名称完全相同时,如果不在前面冠上「
this.
」,那么指的是参数或区域变数;如果在前面冠上「
this.
」,那么指的才是
instance field
。
转自http://www.blogjava.net/guoyongfei/archive/2009/02/06/253571.html