class   StaticStuff
 { 
                  static  int  x=10;
                  static  { x+=5;}
                  public  static  void  main(String  args[ ])
                  {
                      System.out.println("x=" + x);
                  }
                  static  { x/=3;}
   }
今天遇到这样一个程序,运行结果是X=5,可能是我对static不太熟悉的原因吧,一时看不出来这个程序是怎么做的,请大家帮忙指点下,谢谢了!

解决方案 »

  1.   

    类装载
    static初始化
    x =10
    x = 15
    x = 5然后main开始运行。
    打印X,就是5了
      

  2.   

    执行顺序:
    1. 类装载,
    2. static 成员初始化,
    3. 执行各个static{ }块中的代码, 
    4. 执行main函数.
    就是这样.
      

  3.   

    static  int  x=10;
        static  { x+=5;System.out.println("x1=" + x);} public static void main(String[] args) {
            System.out.println("x=" + x);
        }
        static  { x/=3;System.out.println("x2=" + x);}
    结果:
    x1=15
    x2=5
    x=5
      

  4.   

    staic 在类加载的 时候 就开始执行
      

  5.   

    static 先于构造函数,且是局的,既
    一个类只有一个static,此类的所有对象共享此static
      

  6.   

    楼上的, 不要把static和构造函数扯上关系.
    类装载不一定就要实例化对象, 比如Class.forName(), 就只是装载类, 而不创建任何实例.
      

  7.   

    static  { x+=5;}
    静态的自由块,只有在被调用的第一次才执行~
      

  8.   

    在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时執执行的
      

  9.   

    去看看TIJ吧,初始化那详细写了。
    先static ,所以static  int  x=10;
                      static  { x+=5; 
    执行,然后是main的  static  { x/=3;}
    然后打印
      

  10.   

    加载类时,先执行static块,
    然后才是里面的method,不过不要这样写类就行了:
    public class Tester{ private static int i=method(); private static int j= 10; public static void main(String[] args){
    System.out.println(i);
    }
    static int method(){
    return j;
    }
    }
    //hehe,结果很有趣的
      

  11.   

    JAVA程序的执行顺序:静态块-->静态变量-->main()-->对象的成员变量-->构造函数须要注意的是静态变量只会执行一次就会一直存在。下面的程序可以说明:class One
    {
    public One(String str)
    {
    System.out.println(str);
    }
    }
    class Two
    {
    One one_1 = new One("one-1");
    One one_2 = new One("one-2");
    static One one_3 = new One("one-3");
    public Two(String str)
    {
    System.out.println(str);
    }
    }
    public class Test
    {
    static Two two_3 = new Two("two-3");
    public static void main(String[] args)
    {
    System.out.println("Test main() start...");
    Two two_1 = new Two("two-1");
    System.out.println("------------");
    Two two_2 = new Two("two-2");
    }
    }
    /****************************输出结果***********************************/one-3
    one-1
    one-2
    two-3
    Test main() start...
    one-1
    one-2
    two-1
    ------------
    one-1
    one-2
    two-2相信楼主应该理解了吧,Welcome to MY Blog:http://blog.csdn.net/start_java