`
weiyinchao88
  • 浏览: 1185949 次
文章分类
社区版块
存档分类
最新评论

揪心的JAVA面试题

 
阅读更多
Java code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> public class Test{ private static Test tester = new Test(); //step 1 private static int count1; //step 2 private static int count2 = 0; //step 3 public Test(){ //step 4 count1++; count2++; System.out.println("" + count1 + count2); } public static Test getTester(){ //step 5 return tester; } public static void main(String[] args){ Test.getTester(); } }


问:以上代码执行的顺序~,输出的结果~

这是我昨天面试时碰到的一题,我尽量还原了原题。先说一下,这里count1未初始化可不是我忘了,原题就是这么搞D~
正好我对这种带有自身类型的字段的情况有些迷糊,索性答曰:“有变量未初始化,编译器可能会报错”~

我想问的是,如果忽略未初始化错误的话,以上代码执行顺序到底如何?

0
5
分享到:
评论
8 楼 beyondsoros_king 2012-02-28  
tester
lixieinstein 写道
结果就是11,编译不会报错,count1没有初始化但是会自动初始化为0

对 补充一句out输出不加小括弧都当字符长加了
7 楼 buptwhisper 2012-02-28  
其实这个也好弄清楚的,你在每一个可能的地方打上断点,然后debug,你就大致上懂了。
6 楼 wmswu 2012-02-28  
这种类型的面试题 还真不少啊.......
5 楼 H小阿飞 2012-02-28  
程序是没有错误的,对于定义的int类型的字段,未初始化的情况下,默认是0。
至于执行顺序,由于一开始就对Test进行了实例化,所以先执行test()方法,然后执行main方法,最后执行getTester()方法。
如果程序改成private static Test tester;而在main方法中对Test进行实例化:Test.getTester(); tester = new Test();这样的话,test()方法就是最后执行。
上面也说了,int类型的count1未初始化,则默认是0,所以countl和count2 ++ 后,结果都是1,输出结果加了"",所以输出的是一个String类型的字符串,输出结果为11
4 楼 m635674608 2012-02-28  
燈小嗨 写道
JAVA类首次装入时,开始加载静态变量和静态块,也就是说会首先为静态区域分配内存空间,此时tester、count1、count2都已经分配空间,其中tester为一个引用空间,count1、count2为默认值0。
第二步开始执行  private static Test tester = new Test()  这段代码,调用构造器打印出count1、count2  分别为 1 和 1 。然后依次执行一下代码  private static int count1;    private static int count2 = 0;  此时,count2被重置为0,因此如果此时再次打印的话count1、count2的值应该为 1 和 0 。
估计是楼主的题目记忆有问题,这题考察的重点应该在于count被重置后的结果,代码应该不是这样的。

嗯。。这位仁兄解说的正确。。。。。。
3 楼 燈小嗨 2012-02-28  
JAVA类首次装入时,开始加载静态变量和静态块,也就是说会首先为静态区域分配内存空间,此时tester、count1、count2都已经分配空间,其中tester为一个引用空间,count1、count2为默认值0。
第二步开始执行  private static Test tester = new Test()  这段代码,调用构造器打印出count1、count2  分别为 1 和 1 。然后依次执行一下代码  private static int count1;    private static int count2 = 0;  此时,count2被重置为0,因此如果此时再次打印的话count1、count2的值应该为 1 和 0 。
估计是楼主的题目记忆有问题,这题考察的重点应该在于count被重置后的结果,代码应该不是这样的。
2 楼 lixieinstein 2012-02-28  
结果就是11,编译不会报错,count1没有初始化但是会自动初始化为0
1 楼 smiky 2012-02-28  
忽略未初始化错误的话会首先加载静态代码及其代码块,在Test.getTester()执行之前会执行new操作,然后在调用此方法
好久没看JAVA基础了,希望没说错

相关推荐

Global site tag (gtag.js) - Google Analytics