1、每个非静态方法的调用都是基于一个对象的实例,比如 a.call() b.call().this.call() 可以直接写为 call();
但是在静态方法里,this是不能出现的,因为调用静态方法的时候,实例可能还么有创建,这就是为什么在静态方法里不能直接调用非静态方法。
但是如果已经实例化一个对象,就可以在静态方法里调用这个对象的非静态方法了。
2、静态方法中不能调用非静态方法是不准确的。准确的说法是静态方法中不能直接调用非静态方法或非静态属性,但是可以间接调用;
比如在静态方法中new一个对象,然后调用对象的非静态方法或非静态属性;System.out 是一个静态属性,在静态方法中可以直接访问;
out又是一个对象,是经过事先实例化的,所以可以通过System.out 对象调用println方法。
1、每个非静态方法的调用都是基于一个对象的实例,比如 a.call() b.call().this.call() 可以直接写为 call();
但是在静态方法里,this是不能出现的,因为调用静态方法的时候,实例可能还么有创建,这就是为什么在静态方法里不能直接调用非静态方法。
但是如果已经实例化一个对象,就可以在静态方法里调用这个对象的非静态方法了。
2、静态方法中不能调用非静态方法是不准确的。准确的说法是静态方法中不能直接调用非静态方法或非静态属性,但是可以间接调用;
比如在静态方法中new一个对象,然后调用对象的非静态方法或非静态属性;System.out 是一个静态属性,在静态方法中可以直接访问;
out又是一个对象,是经过事先实例化的,所以可以通过System.out 对象调用println方法。
举报