一道面试题,不要运行,写出输出结果,看看自己功力怎么样?

xinji84 2008-12-28 01:43:42
package com.huogongqiang.bean;

public class Testinitial {

public static void main(String[] args){
int a=Test2.a;
System.out.println("finally main");
}

static{
System.out.println("testinital initial");
}
}

class Test1{

static int a=(int)Math.random()*5;

static {
System.out.println("test1 inital");
}
}

class Test2 extends Test1{
static int b=(int)Math.random()*10;

static {
System.out.println("test2 inital");
}
}
...全文
546 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
binghe_feng 2009-01-03
  • 打赏
  • 举报
回复
大涨见识啊!谢谢各位了!今年的笔试很多都载到了java基础上面!郁闷啊!
xinji84 2008-12-30
  • 打赏
  • 举报
回复
因为把它定义成static final的变量它在编绎期间虚拟机知道了它是常量(编绎时常量);那么我们在访问绎时常量的时候int a=Test2.a;
它不会引起该类的初始化,也就是不会引起Test1这个类的确初始化,
而把它改成static int a=5;因为这个变量在编绎期间(注意这里是编绎期间)它不知道这个值到底是什么,有可能在接下来的程序会改变这个变量的值,所以它会在装载类的时候进行该类的初始化,而编绎时常量在装载类之后访问它时是没必要对这个类进行初始化的,再自己好好分析研究一下,分析一下这两种的区别
farfromcross 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ZiSheng 的回复:]
如果你把test1中的a定义为static final int a=5;
结果变为
testinital initial,
finally main;
编译时常量不会引起该类的初始化。
[/Quote]

经测试,将a定义为static final int a=5;
在不会打印出"test1 inital".

如果将a定义为static int a=5;
那么还是会打印出"test1 inital".

请问这是为什么啊?
CJljfn 2008-12-29
  • 打赏
  • 举报
回复
学习的一个好例子啊!
chxy148 2008-12-29
  • 打赏
  • 举报
回复
不错,学习了一下!
shuaiAWP 2008-12-29
  • 打赏
  • 举报
回复
学习一下
xinji84 2008-12-29
  • 打赏
  • 举报
回复
oh yeah 顶
zk20052009 2008-12-29
  • 打赏
  • 举报
回复
mark
java小小兵 2008-12-29
  • 打赏
  • 举报
回复
Mark
WIN_ANGEL 2008-12-29
  • 打赏
  • 举报
回复
进来瞅瞅~
luweifeng1983 2008-12-29
  • 打赏
  • 举报
回复
不错的帖子不看不知道啊
zzcfine1105 2008-12-29
  • 打赏
  • 举报
回复
温故而知新~~~
晴天v1 2008-12-29
  • 打赏
  • 举报
回复
不好意思,看漏了,还有个继承。
晴天v1 2008-12-29
  • 打赏
  • 举报
回复
lz,Test2没有变量a吧?是不是写错了。

testinital initial
test2 inital
finally main
lanzheking 2008-12-28
  • 打赏
  • 举报
回复
谢谢楼主 进来学习
ccc_moriya 2008-12-28
  • 打赏
  • 举报
回复
本来想搞本深入java虚拟机的,但想想自己的水平还不够,还是慢慢来。。。。
xinji84 2008-12-28
  • 打赏
  • 举报
回复
^o^ ^-^ ^o^ ^-^
jlabel 2008-12-28
  • 打赏
  • 举报
回复
学习了.
nicholasmars 2008-12-28
  • 打赏
  • 举报
回复
不错的例子,学习了
grb123 2008-12-28
  • 打赏
  • 举报
回复
testinital initial
test1 inital
finally main
加载更多回复(27)

62,614

社区成员

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

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