黑马程序员技术交流社区

标题: 关于构造代码块的加载问题 [打印本页]

作者: baye1992    时间: 2016-4-1 01:31
标题: 关于构造代码块的加载问题
  1. class Zi
  2. {
  3.     int num = 1;
  4.    
  5.     {
  6.         System.out.println("Zi代码块1..."+num);
  7.         int num = 2;
  8.     }
  9.    
  10.     {
  11.         System.out.println("Zi代码块2..."+num);
  12.         num = 3;
  13.     }
  14.    
  15.     {
  16.         System.out.println("Zi代码块3..."+num);
  17.     }
  18.    
  19.     Zi(){}

  20. }

  21. class Test
  22. {
  23.     public static void main(String[] args)
  24.     {
  25.         new Zi();
  26.     }
  27. }
复制代码
运行结果如下:


求解为何代码
"
Zi代码块2...1
"
为何结果不是  Zi代码块2...2  ?
代码块中  int num = 2;  和  num = 2;  有何区别?

作者: zhoubinjian    时间: 2016-4-1 03:17
int num = 2;你放在了构造代码块里面,下面的那个代码块是读不了的,只读int num = 1;
作者: baye1992    时间: 2016-4-1 10:54
zhoubinjian 发表于 2016-4-1 03:17
int num = 2;你放在了构造代码块里面,下面的那个代码块是读不了的,只读int num = 1; ...

为什么代码块里面 num = 3 能读 int num = 2 不能读啊?
作者: baye1992    时间: 2016-4-1 10:56
zhoubinjian 发表于 2016-4-1 03:17
int num = 2;你放在了构造代码块里面,下面的那个代码块是读不了的,只读int num = 1; ...

啊,突然想到是不是因为代码块里 int num = 3 中 num变成局部变量了?
作者: 菊花爆满山    时间: 2016-4-1 11:10
一个是成员变量 一个是局部变量   你输出语句里默认num前面是有一个this引用的  当然是调用的成员变量了
ps:不知道你这样搞是为了什么  正常情况下写代码 没人这样写吧
作者: zhoubinjian    时间: 2016-4-1 12:21
baye1992 发表于 2016-4-1 10:56
啊,突然想到是不是因为代码块里 int num = 3 中 num变成局部变量了?

是啊,读完第二个代码块NUM被赋值3了,第三个代码块输出自然是3了
作者: ipursue    时间: 2016-4-1 12:41
代码块1,2和3里用的是成员变量num,代码块2里对成员变量进行了修改,所以代码块3的值会改变




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