package test;public class test {
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;
}
}
结果是3 不知道为啥,高手给解释下

解决方案 »

  1.   

    这个题目的关键在于
     static{
            int x=5;
        }
    里面的变量x是个临时变量
    所以test类成员x的值为0
    x--; -- x值为-1myMethod(); 
    y = x++ + ++x;   -- y=-1 + 1 = 0; x=1;System.out.println(x + y + ++x); -- 1+0+2=3
      

  2.   

    楼上的回答基本正确,    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(){ 
            System.out.println("x=" + x + " ");
            y = x++ + ++x;
            System.out.println("x=" + x + " ");
        }这样程序的输出为:
    x=-1 
    x=1 
    3这样就能很清楚的看出myMethod方法执行的操作了
      

  3.   

    你看看java加载类时是按什么顺序做的就容易理解了
      

  4.   

    像一楼说的
    static{
    int x=5;
    }
    里面的变量x是个临时变量

     
    主要就是这个误导答题者
      

  5.   


    public class JdomXML {

    static{
            int x=5;
        }

        static int x,y;
        
        public static void myMethod(){ 
         System.out.println("myMethod before: x=" + x + ",y=" + y);
            y = x++ + ++x;
            System.out.println("myMethod after: x=" + x + ",y=" + y);
            }
        
        public static void main(String[] args) {
         System.out.println("before: x=" + x);
        x--;
        System.out.println("after: x=" + x);
        
        myMethod();
        
        System.out.println("main before: x=" + x + ",y=" + y);
        System.out.println(x + y + ++x);
        System.out.println("main after: x=" + x + ",y=" + y);
        }
    }
    结果:
    before: x=0
    after: x=-1
    myMethod before: x=-1,y=0
    myMethod after: x=1,y=0
    main before: x=1,y=0
    3
    main after: x=2,y=0
      

  6.   


        static{
            int x=5;//局部变量,对全局没有影响
        }
        static int x,y;//初始为0
        public static void main(String[] args) {
        x--;//x=-1
        myMethod();
        System.out.println(x + y + ++x);
        //最后x+y=1+0=1
    而++x的返回结果是x=2,记住此时虽然x=2,但是前面结果已经出来不能改变
    所以最后是1+0+2=3
        }    public static void myMethod(){ 
            y = x++ + ++x;
    x++使得x=0返回-1
    ++x使得x=1返回1
    y=-1+1=0
            }
      

  7.   

    明显输出的x和static中的x不是一个变量,不过#1不解释我还真不知道,学习!!!!!!!
      

  8.   

    还好楼主发了,要是我做到也OVER了
      

  9.   

    不用多解释,这样看你就明白了public class test {
    static {
    int x = 5;
    } static int x, y; public static void main(String[] args) {
    System.out.println("x="+x+" y="+y);
    x--;
    System.out.println("x="+x+" y="+y);
    myMethod();
    System.out.println("x="+x+" y="+y);
    System.out.println(x + y + ++x);
    System.out.println("x="+x+" y="+y); } public static void myMethod() {
    y = x++ + ++x;
    }
    }
      

  10.   

    myMethod(); 
    y = x++ + ++x; -- y=-1 + 1 = 0; x=1; 
    y = x++ + ++x; x++不是先把x的值给y嘛? 那现在y = -1  加 ++x 加加X不是先自加嘛 那现在x应该是1啊
     y = 0 + 1 ; 为什么是 y = 1 +1 呢??
      

  11.   

    妈的也受骗了给 static{
       int x = 5;
    }给这个int害了。。如果没有这个的话结果应该是23
      

  12.   

    static{
      int x=5;
      }
    叫初始化块。只有当类第一次加载时才会初始化。
    package test;public class test {
        static{
            int x=5;
        }
        static int x,y;
        public static void main(String[] args) {
        x--;//此时由于test类未被加载,即x未初始化,因为x类型为int,所以x本来是0,执行完后变为-1
        myMethod();//test类依旧未被初始化,所以y=-1+1=0,x=1
        System.out.println(x + y + ++x);//1+0+2=3
        
        }    public static void myMethod(){ 
            y = x++ + ++x;
            }
    }
      

  13.   

    public class JdomXML {
        
        static{
            int x=5;
        }
        
        static int x,y;
        
        public static void myMethod(){ 
            System.out.println("myMethod before: x=" + x + ",y=" + y);
            y = x++ + ++x;
            System.out.println("myMethod after: x=" + x + ",y=" + y);
            }
        
        public static void main(String[] args) {
            System.out.println("before: x=" + x);
            x--;
            System.out.println("after: x=" + x);
            
            myMethod();
            
            System.out.println("main before: x=" + x + ",y=" + y);
            System.out.println(x + y + ++x);
            System.out.println("main after: x=" + x + ",y=" + y);
        }
    }
      

  14.   

     y = x++ + ++x;这是谁出的题,直接把出题人拖出去打
      

  15.   

    2楼正解,关键在于清楚
    static {
     int x= 5;
    }
    基本上可以理解为"无效",int x= 5的作用范围只在{}内,执行x--时,因为x没有初始化,默认为0,x--后x = -1;
    y = x++ + ++x (-1 + 1,y = 0,x = 1)
    执行MyMethod();
    x + y ++x = 1+0+2=3