java 代码
- /***********************************************************************
- * Module: Static.java
- * Author: danlley
- * Modified: 2006年7月27日 13:11:21
- * Purpose: Defines the class Static
- ***********************************************************************/
- public class Static{
- static{
- int x = 5;
- }
- static int x,y;
- public static void main(String args[]){
- x--;
- myMethod();
- System.out.println(x + y + ++x);
- }
- public static void myMethod(){
- y = x++ + ++x;
- }
- }
---------- Java ----------
3
输出完成 (耗时: 0 秒) - 正常终止
==============================================
分析如下:
首先,是静态变量与静态块的执行顺序问题。接下来才是变量作用域与全局变量之间的关系问题。我不知道是否有人会怀疑变量重复定义的问题。毫无疑问,这段程序是完全可以跑通的。静态块中定义的变量只会在他的作用域范围内部有效。而且只要是重新定义的,就不会受全局变量的影响。也就是说,main方法中的x--仅仅是针对全局变量的。由于Java会将该变量初始化,此时,i--=0,但是在你下次用到 i 时,其值已经变为-1。接下来就是给 y 赋值。同理 x++ 的值应该是 -1 。但是在下次使用 i 时,其值已经变为 0 了。而对“0”累加的结果就是“1”,因此,y的值也是“0”。由此推断,最后结果为“3”。