A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。烊了 中级黑马   /  2014-12-5 17:19  /  1527 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


这三题 ,如果你运行,你能说出答案吗?

1)
  1. public class Demo8 {
  2.         public static void main(String[] args) {
  3.                 Test dq = Test.getInstance();
  4.                 System.out.println(dq.age +"---"+dq.hight);
  5.         }
  6. }
  7. class Test
  8. {
  9.         private static Test dq = new Test(10,100);
  10.         public static int age ;
  11.         public static int hight = 0;
  12.         private Test(int age, int hight){
  13.                 this.age = age;
  14.                 this.hight = hight;
  15.         }
  16.         public static Test getInstance(){
  17.                 return dq;
  18.         }
  19. }
复制代码




2)

  1. public class Demo8 {
  2.         public static void main(String[] args) {
  3.                 Test dq = Test.getInstance();
  4.                 System.out.println(dq.age +"---"+dq.hight);
  5.         }
  6. }
  7. class Test
  8. {
  9.         private static Test dq = new Test(10,100);
  10.         public static int age ;
  11.         public static int hight = 0;
  12.         private Test(int age, int hight){
  13.                 age = age;
  14.                 hight = hight;
  15.         }
  16.         public static Test getInstance(){
  17.                 return dq;
  18.         }
  19. }
复制代码



3)

  1. public class Demo8 {
  2.         public static void main(String[] args) {
  3.                 Test dq = Test.getInstance();
  4.                 System.out.println(dq.age +"---"+dq.hight);
  5.         }
  6. }
  7. class Test
  8. {
  9.         public static int age ;
  10.         public static int hight = 0;
  11.         private static Test dq = new Test(10,100);
  12.        
  13.         private Test(int age, int hight){
  14.                 this.age = age;
  15.                 this.hight = hight;
  16.         }
  17.         public static Test getInstance(){
  18.                 return dq;
  19.         }
  20. }
复制代码



想清楚再回答哟~~~~~
还有大神,麻烦给解释一下~~~~

8 个回复

正序浏览
聪明叉 发表于 2014-12-6 09:48
第二个错了,全都是0

恩恩,看错了,还以为第一个和第二个代码是一样的,原来少了this,这种题目没有什么意义,类似于咬文嚼字
回复 使用道具 举报
nuddlesW 发表于 2014-12-6 00:19
1. 10---0
2. 10---0
3. 10---100

第二个错了,全都是0
回复 使用道具 举报
不懂~~~~
回复 使用道具 举报
有点糊涂了 ~  只猜中了2个 ~   

第一个是给顺序给糊弄了,静态的加载 ——

第二个因为构造函数没有this , 所以都是 0 ,

第三个还好,只要看加载顺序就能弄懂了——  (PS: 毕竟之前错过了,怎么可能第三个还错 TAT
回复 使用道具 举报
1. 10---0
2. 10---0
3. 10---100
其实就是加载的顺序问题,第一二个,开始就有构造赋值10和100,但是后面再执行静态构造成员时又把hight改成0了,而age因为前面已经赋值,所以不会变成默认0.
第三个,则是类一加载,静态成员就有了,而且全赋初始什0,但是后面再来静态构造方法,又给覆盖了,所以是 10,100.
不知道这样讲你明不明白,就是静态加载的顺序问题
回复 使用道具 举报
坐等大神、我是晕乎乎
回复 使用道具 举报
嘿嘿。我也不知道啊,你知道吗??
回复 使用道具 举报
为毛的我的帖子总会沉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马