在Java语法中,static修饰的Java元素(成员、方法、代码块)早于非static的Java元素分配地址空间。如静态代码块在类加载的时候就已经运行了,而非静态代码块只有在类创建的时候才被运行。因此,静态方法或代码块中不能“直接”使用非静态元素,但是可以通过创建对象来间接调用。同样道理,非静态Java元素就可以直接使用静态元素。
package 静态和非静态; public class Test { private String name = "Jim"; static { System.out.println("静态代码块"); // System.out.println(name);//错,不能直接调用name; System.out.println(new Test().name); } public static void test(){ System.out.println("静态方法"); System.out.println(new Test().name); } { System.out.println("非静态代码块"); System.out.println(name); } public static void main(String[] args) { new Test(); } }