| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1932 人关注过本帖
标题:[求助]有关接口初始化的问题?
只看楼主 加入收藏
Sieben7
Rank: 2
等 级:论坛游民
帖 子:116
专家分:20
注 册:2007-4-16
收藏
得分:0 
看来讨论的很深嘛,太谢谢两位了~受益匪浅~

2007-11-14 14:54
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
这是关于类加载和静态初始化的问题.接口中默认的数据都是public static final,当你访问K.k的时候,因为k是K接口新增加的,所以它的初始化也许会依赖于父接口.所以会会以I,J,K的顺序来加载接口.(当加载完成后无论是接口还是类,第一步要做的工作就是静态代码的执行和静态数据的初始化,但是对于接口来说是从当前的接口开始初始化,而对于类来说要从最顶层的类开始执行初始化代码).但是当你访问k.i的时候,i是最顶层的接口继承来的成员,它不依赖于父接口,关键是它是个静态编译期常量!!所以可以直接用接口名来访问。此时就只能输出1.希望LZ用
java -verbose Outer来看看类和接口是如何加载到内存中的.

[此贴子已经被作者于2007-11-14 17:57:17编辑过]

2007-11-14 16:29
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
顶狂放兄一个

I'm here, as always...
2007-11-14 16:44
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 

呵呵。

2007-11-14 16:46
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

再来叫个板。。呵呵。。。

[QUOTE]当你访问k.i的时候,i是最顶层的接口继承来的成员,它不依赖于父接口,所以此时直接加载K接口.[/QUOTE]
既然加载了K。。那么怎么没有初始化k呢???

2007-11-14 17:15
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用huwangvs在2007-11-14 17:15:59的发言:

再来叫个板。。呵呵。。。

当你访问k.i的时候,i是最顶层的接口继承来的成员,它不依赖于父接口,所以此时直接加载K接口.

既然加载了K。。那么怎么没有初始化k呢???

不好意思。此时i是编译期常量。不需要加载K。呵呵。不过加载和初始化是完全不同的两个过程。默认情况下是加载后,直接进行默认的静态初始化动作。但是在反射中,如果改变加载器的参数则是用到的时候才初始化,不一定加载后就非要初始化的。

[此贴子已经被作者于2007-11-14 17:58:45编辑过]

2007-11-14 17:55
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
2007-11-14 18:13
Sieben7
Rank: 2
等 级:论坛游民
帖 子:116
专家分:20
注 册:2007-4-16
收藏
得分:0 
呵呵,很厉害的版主~
2007-11-14 19:55
快速回复:[求助]有关接口初始化的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017840 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved