锁定老帖子 主题:类的装载、连接与初始化 -- 纠正
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-02
最后修改:2010-07-03
------------------------- class NewParent { static int hoursOfSleep = (int) (Math.random() * 3.0); static { System.out.println("NewParent was initialized."); } } class NewbornBaby extends NewParent { static int hoursOfCrying = 6 + (int) (Math.random() * 2.0); static { System.out.println("NewbornBaby was initialized."); } } class Example2 { public static void main(String[] args) { int hours = NewbornBaby.hoursOfSleep; System.out.println(hours); } static { System.out.println("Example2 was initialized."); } } 会输出: Example2 was initialized. NewParent was initialized. 2 如果是 int hours = NewbornBaby. hoursOfCrying ; Example2 was initialized. NewParent was initialized. NewbornBaby was initialized. 2 如果 class NewParent { static int hoursOfSleep = (int) (Math.random() * 3.0); static { System.out.println("NewParent was initialized."); } } class NewbornBaby extends NewParent { static int hoursOfSleep = 6 + (int) (Math.random() * 2.0); static { System.out.println("NewbornBaby was initialized."); } } class Example2 { public static void main(String[] args) { [b] int hours = NewbornBaby.hoursOfSleep; [/b][color=red][/color] System.out.println(hours); } static { System.out.println("Example2 was initialized."); } } 会输出: Example2 was initialized. NewParent was initialized. NewbornBaby was initialized. 2 ------------------------------------ ####################################### 2. 对类的加载、连接和初始化用Visio做了下整理,和大家一起讨论吧。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-02
在这个领域,没有什么东西是永远如我党般永远正确的。
很多知识随着技术的进步,都变成了错误. |
|
返回顶楼 | |
发表时间:2010-07-02
-------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 |
|
返回顶楼 | |
发表时间:2010-07-02
zhangkaitao 写道 -------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 -------------------------------------- 你可以验证下 |
|
返回顶楼 | |
发表时间:2010-07-02
最后修改:2010-07-02
maozj 写道 zhangkaitao 写道 -------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 -------------------------------------- 你可以验证下 验证:翻开《深入JVM第二版》到第X章,肯定不会错.感觉这书要看个1遍,回头再看,理解消化,还有不错的 |
|
返回顶楼 | |
发表时间:2010-07-02
lydawen 写道 maozj 写道 zhangkaitao 写道 -------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 -------------------------------------- 你可以验证下 验证:翻开《深入JVM第二版》到第X章,肯定不会错.感觉这书要看个1遍,回头再看,理解消化,还有不错的 上述代码的执行正确与否 我的验证是在jdk1.6下。。。 当然,我也是说它针对当前jdk版本的验证。 你运行过这段代码? |
|
返回顶楼 | |
发表时间:2010-07-02
我今天正好也看到这个地方,我在1.6下面验证了一下,这儿的确现在不正确了。事实上也是这样的父类的静态变量初始化,然后是子类的静态变量。
|
|
返回顶楼 | |
发表时间:2010-07-02
我测试了一下,在jdk5下和原来一样,是正确的!
|
|
返回顶楼 | |
发表时间:2010-07-02
maozj 写道 lydawen 写道 maozj 写道 zhangkaitao 写道 -------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 -------------------------------------- 你可以验证下 验证:翻开《深入JVM第二版》到第X章,肯定不会错.感觉这书要看个1遍,回头再看,理解消化,还有不错的 上述代码的执行正确与否 我的验证是在jdk1.6下。。。 当然,我也是说它针对当前jdk版本的验证。 你运行过这段代码? 我的JDK就行, java version "1.6.0_10-rc2" Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32) |
|
返回顶楼 | |
发表时间:2010-07-02
zhangkaitao 写道 maozj 写道 lydawen 写道 maozj 写道 zhangkaitao 写道 -------------------------
正确输出(大家都知道): Example2 was initialized. Newparent was initialized. NewbornBaby was initialized. 7 这个肯定是你代码错了 -------------------------------------- 你可以验证下 验证:翻开《深入JVM第二版》到第X章,肯定不会错.感觉这书要看个1遍,回头再看,理解消化,还有不错的 上述代码的执行正确与否 我的验证是在jdk1.6下。。。 当然,我也是说它针对当前jdk版本的验证。 你运行过这段代码? 我的JDK就行, java version "1.6.0_10-rc2" Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32) 你在java version "1.6.0_17"下测测 |
|
返回顶楼 | |