静态变量、静态块与变量自增代码分析

来源:互联网 发布:node.js能实现什么 编辑:程序博客网 时间:2024/05/22 03:44
java 代码
  1. /***********************************************************************  
  2.  * Module:  Static.java  
  3.  * Author:  danlley  
  4.  * Modified: 2006年7月27日 13:11:21  
  5.  * Purpose: Defines the class Static  
  6.  ***********************************************************************/  
  7.   
  8. public class Static{   
  9.       static{   
  10.           int x = 5;   
  11.       }   
  12.   
  13.       static int x,y;   
  14.   
  15.       public static void main(String args[]){   
  16.             x--;   
  17.             myMethod();   
  18.             System.out.println(x + y + ++x);   
  19.       }   
  20.   
  21.       public static void myMethod(){   
  22.             y = x++ + ++x;   
  23.       }   
  24. }   
==============================================
---------- Java ----------
3

输出完成 (耗时: 0 秒) - 正常终止
==============================================
分析如下:
首先,是静态变量与静态块的执行顺序问题。接下来才是变量作用域与全局变量之间的关系问题。我不知道是否有人会怀疑变量重复定义的问题。毫无疑问,这段程序是完全可以跑通的。静态块中定义的变量只会在他的作用域范围内部有效。而且只要是重新定义的,就不会受全局变量的影响。也就是说,main方法中的x--仅仅是针对全局变量的。由于Java会将该变量初始化,此时,i--=0,但是在你下次用到 i 时,其值已经变为-1。接下来就是给 y 赋值。同理 x++ 的值应该是 -1 。但是在下次使用 i 时,其值已经变为 0 了。而对“0”累加的结果就是“1”,因此,y的值也是“0”。由此推断,最后结果为“3”。

0 0
原创粉丝点击