我创建了个Person类,类中有run方法和eat方法,再另外new一个Test类,在Text类中创建方法shiyong,将Person类作为参数传递进去,并且调用Person类方法,那么为什么这个shiyong方法要加static呢?不然在main方法中就出错呢?我也实例化,创建Person的对象了,为什么还出错呢?shiyong方法作为一个非静态方法,然后在在main方法中静态调用不行吗?
在静态方法里不能调用非静态方法。
我简单解释一下原因:
① 这是因为static方法是没有this的方法,在普通的非静态方法里,如:
public void eat(this){}其实你写的eat()和run()都默认带有一个参数this(指调用方法的那个对象),只不过我们在写的时候没有添加,是Java虚拟机为我们添加的,这也是为什么非静态方法可以直接调用其它非静态方法,你也可以这么写:
public void eat(){② 再说回static,在静态方法里调用非静态方法也不是不可以,只要你传递进去一个引用即可,如你写的:
③最后,main方法是个静态方法,你要想调用非静态方法shiyong,也得传递进去一个引用,如下: