黑马程序员技术交流社区

标题: 这三题,如果不运行,你知道答案吗? [打印本页]

作者: 。烊了    时间: 2014-12-5 17:19
标题: 这三题,如果不运行,你知道答案吗?

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

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. }
复制代码



想清楚再回答哟~~~~~
还有大神,麻烦给解释一下~~~~
作者: 。烊了    时间: 2014-12-5 17:51
为毛的我的帖子总会沉
作者: 大大的心    时间: 2014-12-5 17:52
嘿嘿。我也不知道啊,你知道吗??
作者: 雪落纷飞    时间: 2014-12-6 00:00
坐等大神、我是晕乎乎
作者: nuddlesW    时间: 2014-12-6 00:19
1. 10---0
2. 10---0
3. 10---100
其实就是加载的顺序问题,第一二个,开始就有构造赋值10和100,但是后面再执行静态构造成员时又把hight改成0了,而age因为前面已经赋值,所以不会变成默认0.
第三个,则是类一加载,静态成员就有了,而且全赋初始什0,但是后面再来静态构造方法,又给覆盖了,所以是 10,100.
不知道这样讲你明不明白,就是静态加载的顺序问题
作者: 曛丨黯淡浮华    时间: 2014-12-6 01:38
有点糊涂了 ~  只猜中了2个 ~   

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

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

第三个还好,只要看加载顺序就能弄懂了——  (PS: 毕竟之前错过了,怎么可能第三个还错 TAT
作者: as604049322    时间: 2014-12-6 09:09
不懂~~~~
作者: 聪明叉    时间: 2014-12-6 09:48
nuddlesW 发表于 2014-12-6 00:19
1. 10---0
2. 10---0
3. 10---100

第二个错了,全都是0
作者: nuddlesW    时间: 2014-12-6 10:16
聪明叉 发表于 2014-12-6 09:48
第二个错了,全都是0

恩恩,看错了,还以为第一个和第二个代码是一样的,原来少了this,这种题目没有什么意义,类似于咬文嚼字




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2