一道java题,为什么答案这样诡异
- Assembly code
(7)关于以下application的说明,正确的是( )1. class StaticStuff2. { 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=5D、编译通过,执行结果为:x=3
这是那个题
答案是B
我把下面的代码拷贝出来,运行结果是C,求解
- Java code
class StaticStuff { static int x=10; static { x+=5;} public static void main(String args[]) { System.out.println("x=" + x); } static { x/=3;}}
[解决办法]
结果等于5是正确的
[解决办法]
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块。
[解决办法]
运行一下这段代码
- Java code
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); }}
[解决办法]
类加载的时候,先加载静态初始化块 再加载静态方法
[解决办法]
[解决办法]
类初始化顺序:初始化父类-初始化子类的静态变量或方法(顺序执行)
你类里面的静态部分都被执行了,所以x是5,最后再进入main方法里被输出的
[解决办法]
答案错误,鉴定完毕,原因见2楼
[解决办法]
只要一加载类就会依次加载静态属性和静态代码块,所以x的值最终是5
[解决办法]
java初级程序员群94321772
[解决办法]
不要迷信答案。。。
[解决办法]
答案B是对的,不懂的去翻书看static块
------解决方案--------------------
见3L
[解决办法]
可以按顺序载入 static 不矛盾
[解决办法]
[解决办法]
答案错误,一个类中可以有多个static块和member块,但static只在类被加载时执行一次
[解决办法]
我也来聊聊static静态关键字
static{ //这是静态块 }//静态块只有在类第一次被加载的时候进行初始化,不会进行第二次加载
//注意下面写法
public static void main(String[] args){
static{ int i=0; }//这种写法是会编译出错的
}
//注意静态关键字的含义,static所修饰的成员只属于类,在方法中是没有static的引用的
static修饰的成员在堆中开辟了唯一的空间,不会进行第二次开辟
[解决办法]
答案骗人,可以有多个static块,不过只会在类加载的时候运行一次(什么时候类加载我也不清楚)。而具体的运行顺序视static块在类中的位置而定