

为什么后面打印a的时候不会报错了
首先要了解静态方法和非静态方法(实例方法)之间的不同,静态方法在整个程序刚开始运行就已经加载了,而非静态方法是当new了一个对象的时候才会被加载到,他比静态方法后执行。
你的第一个例子a,b变量都是非静态变量,是无法在静态变量中使用的,因为静态方法加载时非静态变量还没有加载肯定无法使用。第二个例子静态变量可以在非静态方法中使用,结合上面说的静态变量或方法都优先于非静态方法或变量加载,当然等加载到非静态方法时静态变量已经初始化赋值完毕了。总得来说就是加载顺序的问题:静态方法或变量>非静态方法或变量