将一个类作为参数传递到另一个方法中,并且调用类中的方法,是 静态调用吗?
我创建了个Person类,类中有run方法和eat方法,再另外new一个Test类,在Text类中创建方法shiyong,将Person类作为参数传递进去,并且调用Per...
我创建了个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(){
this.run(); //你可以显式的使用this,也有些人执意这么做,认为这样“更清楚更明白”,
//但是千万别这么做,我们使用高级语言的目的就是让它帮我们做点事情。
}
② 再说回static,在静态方法里调用非静态方法也不是不可以,只要你传递进去一个引用即可,如你写的:
public static void shiyong(Person p){ //p就是传递进来的引用,和this效果相同
p.eat(); //调用非静态方法
}
③最后,main方法是个静态方法,你要想调用非静态方法shiyong,也得传递进去一个引用,如下:
public void shiyong(Person p){
p.eat();
p.run();
}
public static void main(String[] args){
Test test = new Test(); //传递进来的引用
Person p = new Person();
test.shiyong(p); //调用非静态方法shiyong
test.shiyong(new Person());
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询