MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java的static

Posted on 2010-12-30 01:20 leekiang 阅读(384) 评论(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

只有注册用户登录后才能发表评论。


网站导航: