个人感觉楼主问题的问题并不是不清楚为什么静态方法里只能调用静态成员。而是为什么静态方法中new了一个对象后,就可以调用非静态函数。
以前我也不懂。现在的理解:- class Test{
- private static int a=1;
- void show(){
- System.out.println("111");
- }
- public static void main(String[] args){
- System.out.println(a);
- show();
- Test t=new Test();
- t.show();
- }
- }
复制代码 我觉得重点是看方法被“谁”调用。
在main方法里的某个方法没有明确是谁调用的,那么这个方法前缺省的是类名.
上文,如果在main方法内直接调用show()方法,说明这个方法就是被类所调用的,而它又是非静态方法,jvm在运行到这行时,方法区内还没有show这个方法,自然会报错。
为什么t.show()可以,这个就不用多说了,有对象了,方法区里就可定有非静态方法了,被对象调用理所当然。
说实话,在看到这个问题前,还不是很清晰,也算是对自己的知识巩固吧。 |