将一个类作为参数传递到另一个方法中,并且调用类中的方法,是 静态调用吗?

我创建了个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());
}

温馨提示:答案为网友推荐,仅供参考
相似回答