黑马程序员技术交流社区

标题: 成员变量与构造代码块位置调换产生的问题,求解 [打印本页]

作者: java_learner    时间: 2014-7-10 23:08
标题: 成员变量与构造代码块位置调换产生的问题,求解
本帖最后由 java_learner 于 2014-7-10 23:12 编辑
  1. public class Test {
  2.         int num = 1;
  3.         {
  4.                 num = 2;
  5.         }

  6.         public static void main(String args[]) {
  7.                 Test test = new Test();
  8.                 System.out.println(test.num);        //输出结果为2
  9.         }
  10. }


  11. public class Test {
  12.        
  13.         {
  14.                 num = 2;
  15.         }
  16.        
  17.         int num = 1;
  18.         public static void main(String args[]) {
  19.                 Test test = new Test();
  20.                 System.out.println(test.num);        //输出结果为什么是1 而不是2 呢?
  21.         }
  22. }
复制代码





作者: 咖啡苏克    时间: 2014-7-10 23:55
用Debug走了一遍,
第一个新建Test()对象先走的成员变量再走的构造代码块
第二个先走的构造代码块再走的成员变量
这说明 输出结果跟成员变量和构造代码块的先后位置有关
作者: java_learner    时间: 2014-7-11 00:04
咖啡苏克 发表于 2014-7-10 23:55
用Debug走了一遍,
第一个新建Test()对象先走的成员变量再走的构造代码块
第二个先走的构造代码块再走的成 ...

可是初始化不是 显示初始化 --> 构造代码块初始化  这样的顺序的吗? 为什么第二个 构造代码块 会先初始化的哩? 难道初始化真的跟代码的先后顺序有关 ?
作者: fantacyleo    时间: 2014-7-11 00:33
java_learner 发表于 2014-7-11 00:04
可是初始化不是 显示初始化 --> 构造代码块初始化  这样的顺序的吗? 为什么第二个 构造代码块 会先初始化 ...

你应该是记错了,显式初始化和初始化块是同一优先级的,执行先后由代码出现顺序决定
作者: yanyoucheng520    时间: 2014-7-11 03:07
这个还真不懂,得好好学学
作者: java_learner    时间: 2014-7-11 12:33
fantacyleo 发表于 2014-7-11 00:33
你应该是记错了,显式初始化和初始化块是同一优先级的,执行先后由代码出现顺序决定 ...

原来是这样呀!受教了.




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