黑马程序员技术交流社区

标题: 静态代码块的一道题,帮忙看看自己恢复的回答对不对 [打印本页]

作者: jk812216157    时间: 2015-10-27 11:38
标题: 静态代码块的一道题,帮忙看看自己恢复的回答对不对
本帖最后由 jk812216157 于 2015-10-28 20:03 编辑
  1. class Test_01{
  2.         static {
  3.                  x = 5;
  4.         }
  5.         static int x,y;
  6.         public static void main(String[] args) {
  7.                 x--;
  8.                 myMethod();
  9.                 System.out.println(x + y++ + x);
  10.         }
  11.         public static void myMethod() {
  12.                 y = x++ + ++x;
  13.         }
复制代码
这个输出结果是22
  1. class Test_02{
  2.         static {
  3.                 int  x = 5;
  4.         }
  5.         static int x,y;
  6.         public static void main(String[] args) {
  7.                 x--;
  8.                 myMethod();
  9.                 System.out.println(x + y++ + x);
  10.         }
  11.         public static void myMethod() {
  12.                 y = x++ + ++x;
  13.         }
复制代码
这个输出结果却是2
只是一个int的区别,为什么区别这么大

作者: ln0491    时间: 2015-10-27 11:51
学习了。。。。。。。。。
作者: jk812216157    时间: 2015-10-28 18:33
问了一个大神,说是Test_01的静态代码块里的x是作用于类里的变量,而Test_02静态代码块里x是创建于代码块里的,与类里的不同,所以两种输出结果不同。属于局部变量作用域的问题。自己回帖了,这个解答应该对吧?
作者: qi8215686    时间: 2015-10-28 19:43
因为一中的X在整个类中有效,所以X自减后变4,调用方法后,y=10,x=6,所以是22
第二个中X只在大括号内有效,初始化值为0,你该会算吧
作者: jk812216157    时间: 2015-10-28 20:02
qi8215686 发表于 2015-10-28 19:43
因为一中的X在整个类中有效,所以X自减后变4,调用方法后,y=10,x=6,所以是22
第二个中X只在大括号内有效 ...

懂了,谢谢
作者: 人大常务委员    时间: 2015-10-28 22:13
受教了 !!!
作者: JYcainiao    时间: 2015-10-28 23:16
标题:
qi8215686 发表于 2015-10-28 19:43
因为一中的X在整个类中有效,所以X自减后变4,调用方法后,y=10,x=6,所以是22
第二个中X只在大括号内有效 ...

第一个里面y应该是等于12吧
  X在整个类中只要运算完了  就变成5了吧
作者: jk812216157    时间: 2015-10-29 21:35
JYcainiao 发表于 2015-10-28 23:16
第一个里面y应该是等于12吧
  X在整个类中只要运算完了  就变成5了吧

静态变量是最先被定义的,然后是静态代码块,x应该先被赋值5,再自减,y=11,最后输出22
作者: JYcainiao    时间: 2015-10-29 21:57
jk812216157 发表于 2015-10-29 21:35
静态变量是最先被定义的,然后是静态代码块,x应该先被赋值5,再自减,y=11,最后输出22 ...

y = 11  那 x 呢?   我怎么感觉 y = x++ + ++x; 这里算出来的是  y = 5 + 7 = 12 啊
作者: JYcainiao    时间: 2015-10-29 21:59
第二个的y = x++ + ++x  这里算出来的是   y = -1 + 1 = 0  这样不对吗
作者: JYcainiao    时间: 2015-10-29 22:01
还是不是很理解啊  如果把x当作静态的话  第一个的 y = x++ + ++x  应该是  y = 4 + 6 = 10   输出的结果是
6 + 10 + 5 = 12
作者: jk812216157    时间: 2015-10-30 22:22
JYcainiao 发表于 2015-10-29 22:01
还是不是很理解啊  如果把x当作静态的话  第一个的 y = x++ + ++x  应该是  y = 4 + 6 = 10   输出的结果是 ...

今天上课刚好讲到这个,y=4+6=10不错的,但x=6,所以结果是6+10+6=22
作者: JYcainiao    时间: 2015-10-30 22:25
有自己的理解了   知道了  
作者: dai2686779    时间: 2015-10-30 22:29
6666666666666666




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