日期:2014-05-20  浏览次数:20776 次

java基础的一个简单问题,关于static关键字
下面这段程序的执行过程是怎样的,求详细解说,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 code

public class Static{
    //这个静态语句块会首先执行,只是这里的x是局部变量,下面的x的全局变量不一样,所以这里的x的值 为0;
    static {
        int x = 5;
        System.out.println("x5=="+x);
    }
    static int x, y;  //x,y为全局变量

    public static void main(String args[]) {
        x--;
        myMethod();
        System.out.println(x + y + ++x);
    }

    public static void myMethod() {
        y = x++ + ++x;
    }
}

------解决方案--------------------
Java code


public class Static {
    
    static {//这个x的作用域在大括号之内 出了大括号就无效
    int x = 5;//加载类的时候就执行了
    System.out.println(x);//output;5 这里其实是最近的x
    }
    
    static int x, y;

    
    
    public static void main(String args[]) {
    System.out.println(x);//output;0 这里打印的其实是第二个x
    x--;// x = -1
    myMethod();
    System.out.println(x + "  " + y);//x = 1 因为加了两次   y = -1 + 1 = 0 注意 前置++ 和 后置++ 
    System.out.println(x + y + ++x); //output : 1+0+2 = 3
    }

    public static void myMethod() {
    y = x++ + ++x;
    
    }
}