知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 15425|回复: 20

[讨论] 给大家做一个题目

[复制链接]
发表于 2007-4-24 17:21:03 | 显示全部楼层 |阅读模式
一个大公司JAVA考题的问题
class Singleton
{
1) private static Singleton obj = new Singleton();
2) public static int counter1;
3) public static int counter2 = 0;
4) private Singleton()
{
counter1++;
counter2++;
}
5) public static Singleton getInstance()
{
return obj;
}
}
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2);
}
}

控制台输出的是什么?
另外1,2,3,4,5的执行顺序如何?
发表于 2007-4-24 21:27:46 | 显示全部楼层
 楼主| 发表于 2007-4-24 21:45:00 | 显示全部楼层
发表于 2007-4-24 23:53:09 | 显示全部楼层
发表于 2007-4-25 09:16:30 | 显示全部楼层
 楼主| 发表于 2007-4-25 10:01:20 | 显示全部楼层
我把答案公布吧
控制台输出的是obj.counter1==1
                     obj.counter2==0

执行的顺序是14235。
发表于 2007-4-25 14:01:57 | 显示全部楼层
 楼主| 发表于 2007-4-25 17:05:02 | 显示全部楼层

回复 #8 longzumengyue 的帖子

你的答案太离谱了吧,一共才1,2,3,4,5。
你居然能答出15738,还专家说。。。
好比语文老师叫你读出师表,你却给他背勾股定理!
彻底无语了!
发表于 2007-4-25 17:46:19 | 显示全部楼层
原帖由 lastwolf 于 2007-4-25 17:05 发表
你的答案太离谱了吧,一共才1,2,3,4,5。
你居然能答出15738,还专家说。。。
好比语文老师叫你读出师表,你却给他背勾股定理!
彻底无语了!


出師表?
結尾兩句不就是~
.....臨表涕泣 不知所云
怎麼跟我姊的答覆一個德行啊

人家longzumengyue一定是嫌論壇氣份太嚴肅了
開個心吧?

[ 本帖最后由 sunny_liu 于 2007-4-25 17:47 编辑 ]
 楼主| 发表于 2007-4-25 17:56:14 | 显示全部楼层

回复 #10 sunny_liu 的帖子

呵呵,居然被细心的sunny_liu看出端倪了
发表于 2007-4-25 18:52:03 | 显示全部楼层

如果不是知道您在別的論壇的身份
我一定說您就是我那個精靈古怪的姐姐
----從不帶髒字眼
发表于 2007-4-25 19:09:21 | 显示全部楼层
 楼主| 发表于 2007-4-25 19:22:06 | 显示全部楼层

回复 #12 sunny_liu 的帖子

看来偶以后还是直接点了,有些时候,言语里带点艺术性比较能令人接受!
发表于 2007-4-26 10:05:29 | 显示全部楼层
public class Singleton {
       
        private static Singleton obj = new Singleton("num");
        public static int counter1;
        public static int counter2 = 0;
       
        private Singleton(String num) {
                System.out.println(num);
                System.out.println(counter1+"");
                System.out.println(counter2+"");
                counter1 =counter1+3;
                counter2 =counter2+3;
                System.out.println(counter1+"");
                System.out.println(counter2+"");
        }
       
        public static Singleton getInstance() {
                return obj;
        }
        public static void main(String[] args) {
               
                Singleton obj = Singleton.getInstance();
                System.out.println("obj.counter1 == "+obj.counter1);
                System.out.println("obj.counter2 == "+obj.counter2);
        }

}
  
惭愧 学了很这么久java 还是做错了!!
发表于 2007-4-26 10:08:42 | 显示全部楼层
public class Singleton {
       
        private static Singleton obj = new Singleton("??");
        public static int counter1;
        public static int counter2 = 0;
       
        private Singleton(String num) {
                System.out.println(num);
                System.out.println(counter1+"");
                System.out.println(counter2+"");
                counter1 =counter1+3;
                counter2 =counter2+3;
                System.out.println(counter1+"");
                System.out.println(counter2+"");
        }
       
        public static Singleton getInstance(String num) {
                System.out.println(num + "");
                return obj;
        }
        public static void main(String[] args) {
               
                Singleton obj = Singleton.getInstance("???");
                System.out.println("obj.counter1 == "+obj.counter1);
                System.out.println("obj.counter2 == "+obj.counter2);
        }

}


看这个更好
??
0
0
3
3
???
obj.counter1 == 3
obj.counter2 == 0
发表于 2007-4-26 10:24:21 | 显示全部楼层
public class Singleton {
       
        public static int counter1;
        public static int counter2 = 0;
        private static Singleton obj = new Singleton("num");

       
        private Singleton(String num) {
                System.out.println(num);
                System.out.println(counter1+"");
                System.out.println(counter2+"");
                counter1 =counter1+3;
                counter2 =counter2+3;
                System.out.println(counter1+"");
                System.out.println(counter2+"");
        }
       
        public static Singleton getInstance(String num) {
                System.out.println(num + "");
                return obj;
        }
}


public class Main {

        public static void main(String[] args) throws Exception{
                Class.forName("Singleton");
                System.out.println("-- main() start");
                System.out.println("-- begin define obj var");
                Singleton obj ;
                System.out.println("-- end define obj");
                System.out.println("-- begin ref obj to XX.get**()");
                obj = Singleton.getInstance("num1");
                System.out.println("-- end ref obj to XX.get**()");
                System.out.println("obj.counter1 == "+obj.counter1);
                System.out.println("obj.counter2 == "+obj.counter2);
        }
}

console:
num
0
0
3
3
-- main() start
-- begin define obj var
-- end define obj
-- begin ref obj to XX.get**()
num1
-- end ref obj to XX.get**()
obj.counter1 == 3
obj.counter2 == 3
发表于 2007-4-26 10:27:03 | 显示全部楼层
 楼主| 发表于 2007-4-26 21:41:45 | 显示全部楼层

回复 #15 dw2561103 的帖子

这是一道考java基本功的很好的题目。

下面我们分析以下它的执行过程:
运行MyMain之后,
首先执行Singleton.getInstance();
它的执行过程是这样:
首先是Singleton类的装载,然后JVM会初始化Singleton类,初始化的过程中,需要初始化静态变量。就是按顺序依次初始化:
1、初始化private static Singleton obj = new Singleton();new会调用构造函数,因为构造函数使用了counter1和counter2,所以先让counter1后变成1,然后让counter2变为1。
2、继续初始化public static int counter1; 因为没有赋值,所以couter1仍然是1
3、继续初始化public static int counter2 = 0,这时候有赋值运算,所以counter2变成了0
发表于 2007-4-27 02:38:59 | 显示全部楼层
发表于 2007-4-27 10:10:20 | 显示全部楼层
发表于 2009-4-5 22:31:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-2 07:03

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表