(7)关于以下application的说明,正确的是(        )
1. class   StaticStuff
2. { 
3.                  static  int  x=10;
4.                  static  { x+=5;}
5.                  public  static  void  main(String  args[ ])
6.                  {
7.                       System.out.println(“x=” + x);
8.                  }
9.                  static  { x/=3;}
10.   }
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:x=5
D、编译通过,执行结果为:x=3这是那个题
答案是B
我把下面的代码拷贝出来,运行结果是C,求解class   StaticStuff
 { 
static  int  x=10;
static  { x+=5;}
public  static  void  main(String  args[])
{
System.out.println("x=" + x);
}
static  { x/=3;}
}

解决方案 »

  1.   

    class StaticStuff { static int x=10; 
    static { x+=5;} // 15
    public static void main(String args[]) {
     System.out.println("x=" + x); }
     static { x/=3;} // 5
     } 
    按顺序载入static块。
      

  2.   

    运行一下这段代码class StaticStuff {
    static int x = 10;
    static {
    x += 5;
    System.out.println("static x += 5, x = " + x);
    } public static void main(String args[]) {
    System.out.println("in main");
    System.out.println("x=" + x);
    } static {
    x /= 3;
    System.out.println("static x /= 3, x = " + x);
    }
    }
      

  3.   

    类初始化顺序:初始化父类-初始化子类的静态变量或方法(顺序执行)你类里面的静态部分都被执行了,所以x是5,最后再进入main方法里被输出的
      

  4.   

    答案B是对的,不懂的去翻书看static块
      

  5.   

     可以按顺序载入 static 不矛盾
      

  6.   

    答案错误,一个类中可以有多个static块和member块,但static只在类被加载时执行一次
      

  7.   

    我也来聊聊static静态关键字  
       static{ //这是静态块 }//静态块只有在类第一次被加载的时候进行初始化,不会进行第二次加载
       
       //注意下面写法
      public static void main(String[] args){
                 static{ int i=0; }//这种写法是会编译出错的
       }
    //注意静态关键字的含义,static所修饰的成员只属于类,在方法中是没有static的引用的
    static修饰的成员在堆中开辟了唯一的空间,不会进行第二次开辟
      

  8.   

    答案骗人,可以有多个static块,不过只会在类加载的时候运行一次(什么时候类加载我也不清楚)。而具体的运行顺序视static块在类中的位置而定