你发的代码块不是静态的啊,如果你那个代码块是静态的话,那static{System.out.println(x);}先加载进内存,这时static int x=5;是还没有进内存的,所以打印语句中的x还没有声明,而java中的变量是要先声明再使用,所以编译会出错。
加载要经过类加载和对象的初始化。1.类加载阶段: 会加载类,会加载类变量2.对象初始化阶段:会调用该类的初始化块和构造器进行对象的初始化。所以,我试了一下,编译通过(JDK1.8) package test.SWITCH;import java.io.BufferedReader; import java.io.InputStreamReader;/** * Created by liudy on 16/10/17. */ public class Switch { { x = 2; System.out.println(x); } static int x = 5; }
package test.SWITCH;import java.io.BufferedReader;
import java.io.InputStreamReader;/**
* Created by liudy on 16/10/17.
*/
public class Switch {
{
x = 2;
System.out.println(x);
} static int x = 5;
}
涉及到这样的东西,会导致static未加载完,先加载非static的东西去了,最后就会出错