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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java_learner

初级黑马

  • 黑马币:21

  • 帖子:11

  • 精华:0

本帖最后由 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. }
复制代码




5 个回复

倒序浏览
用Debug走了一遍,
第一个新建Test()对象先走的成员变量再走的构造代码块
第二个先走的构造代码块再走的成员变量
这说明 输出结果跟成员变量和构造代码块的先后位置有关
回复 使用道具 举报
咖啡苏克 发表于 2014-7-10 23:55
用Debug走了一遍,
第一个新建Test()对象先走的成员变量再走的构造代码块
第二个先走的构造代码块再走的成 ...

可是初始化不是 显示初始化 --> 构造代码块初始化  这样的顺序的吗? 为什么第二个 构造代码块 会先初始化的哩? 难道初始化真的跟代码的先后顺序有关 ?
回复 使用道具 举报
java_learner 发表于 2014-7-11 00:04
可是初始化不是 显示初始化 --> 构造代码块初始化  这样的顺序的吗? 为什么第二个 构造代码块 会先初始化 ...

你应该是记错了,显式初始化和初始化块是同一优先级的,执行先后由代码出现顺序决定
回复 使用道具 举报 1 0
这个还真不懂,得好好学学
回复 使用道具 举报
fantacyleo 发表于 2014-7-11 00:33
你应该是记错了,显式初始化和初始化块是同一优先级的,执行先后由代码出现顺序决定 ...

原来是这样呀!受教了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马