静态方法是属于类的而动态方法属于实例对象,因此在类加载的时候就会为其分配内存,可以通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。所以说如果我们在静态方法中调用非静态成员变量会超前,可能会调用了一个还未初始化的变量,因此编译器会报错。