用实例名来引用类成员(static成员)是不是一种假象?欢迎大家讨论!

smartnose 2003-05-31 11:50:48
最近闲暇之余研究了一下c++,通过c++的学习来反思java使我对java的理解又深了

一步.但是有些问题仔细推敲时发现一些问题.
问题如下
在java中的每个类中存在一个隐藏的this变量,用来存放当然实例的引用.当各

个具体实例引用类的成员时,interpret通过这个隐藏的this变量来区分各个实例.
在java中类的成员定义有一个static关键字,用来定义类成员,类成员对于每个

实现来说只存在一个,也就是说一般通过类名来引用.但是java 规范中又说明可以

通过实例来引用类成员或者实例成员.
于是问题就出现了.当用this来引用类成员时,在实例中并不存在这个类成员.是

不是编译器在编译时将所以用实例来引用类成员的形式全部转换成为用类名来引

用呢.
用实例名来引用类成员(static成员)是不是一种假象?
...全文
13 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
onefox 2003-05-31
  • 打赏
  • 举报
回复
不只 static , 方法也不会生成多次。
为每个实例重新生成一套方法是很大的开销
同类的不同实例共享一套方法
然而我们也可以直接用实例来引用方法

(小菜鸟的想法,说错了请包涵 ^_^)
smartnose 2003-05-31
  • 打赏
  • 举报
回复
补充一下类变量并不会在每个实例中存在,他只存在于加载类的内存中.各个实例内存中是不会存在类成员变量的!
smartnose 2003-05-31
  • 打赏
  • 举报
回复
那是当然,类的代码区由所以实例共享,可能是我自己想得太多,也可能是对c++研究深入后,对地址操作比较关心.一直没办法想明白这个问题,看来有必要研究java相关实现规范,看看到底是怎么实现的了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧