public class Test1 {
static  int  x=10;                   static  { x+=5;}                   public  static  void  main(String[] args)                   {                       System.out.println("x=" + x);                 }                   static  { x/=3;}}
谁能帮我解释下????

解决方案 »

  1.   

    x=10 ;x=10+5; x=15/3 你有什么疑惑
      

  2.   

    static{}中的代码段在类加载后就执行了,先于main()方法
    所以 x = (10+5)/3 = 5
      

  3.   

    首先在类加载的时候事先声明了x=10,然后会分别执行
    static { x+=5;},static { x/=3;}最后在执行main方法的时候由于x是static的所以这个时候x等于5你也可以理解为当Test1存在就执行了
    x=10
    x+=5
    x/=3
      

  4.   

    正解,我补充一下。
    类中成员的加载顺序:
    1.先静态部分,后非静态部分。
    2.对于静态部分,先属性后方法。
    3.对于非静态部分,main方法在最后执行。
      

  5.   

    估计LZ是不明白static{}这样的代码的意思,这样的代码叫做静态代码块,在类加载的时候会被执行
    其实,像一般的定义
    static int a = 10; //为什么在加载的时候变成10,这样的代码其实相当于
    static int a;  //定义
    static {a=10;} //赋值
    所以,很显然,你的类被加载的时候,static{}代码块被执行,然后因为是application程序,会进入程序入口的main方法,剩下的就不用解释了
    和static{}对应的是{},即前面不加static,这样的{}的代码块就实例初始化块,会在对象初始化的时候被调用,先于构造函数,比如
    class A {
        static {System.out.println("类加载时执行");}
        {System.out.println("对象创建时,构造函数执行前被执行");}
        public A() {
            System.out.println("构造函数,对象创建的时候执行");
        }
        public static void main(String[] args) {
            System.out.println("程序入口,程序启动时执行");
            A a = new A(); //创建对象,可以看看执行顺序
        }
    }
      

  6.   

    static{}中的代码段在类加载后就执行了,先于main()方法
    所以 x = (10+5)/3 = 5。正解不解释。