【问题标题】:Calling non-static method from another non-static method从另一个非静态方法调用非静态方法
【发布时间】:2014-11-30 14:00:13
【问题描述】:

给定下面的myClass和非静态方法run(),下面这行代码是有效的:

new myClass().move();

不过,这也是有效的:

move();

我理解第一次尝试 (new myClass().move()) 创建了一个类的实例,然后调用它的方法。第二次尝试是否也隐含地做同样的事情?换句话说,两次尝试真的一样吗?如果不是,那么根本区别是什么,哪个更受欢迎?

OscarRyz 在here 帖子中的评论似乎触及了这一点,但他没有详细说明。

class myClass 
{
    void move() {
        //...some code
    }
    void run() {
        new myClass().move();
    }
}

谢谢。

【问题讨论】:

  • 非静态方法属于对象的一个​​实例(研究“this”以了解更多信息)。仔细考虑该方法会在您的代码中将哪个实例视为“this”。

标签: java non-static


【解决方案1】:

它不会做同样的事情。

在第一次尝试new myClass().move(); 时,您创建了您的类的另一个实例,然后在这个新实例上调用方法。

但是在您第二次尝试move(); 时,您只需调用当前实例的方法。你已经初始化了它。同this.move();

首选第二个,因为您不创建类的另一个实例,而是使用当前的实例。

【讨论】:

  • 感谢您还谈到了“首选”方法,尽管首选的方法可能取决于特定的上下文。在我的代码上下文中,我同意 this.move() 似乎更有效率。
  • @sedeh 当然,这取决于上下文,但大多数情况下,如果您可以访问当前实例中的方法,则最好不要创建该类的新实例。
【解决方案2】:

它们不一样。

如果调用move();,则在myClass的当前实例上执行该方法(这与this.move();相同)。

如果您调用new myClass().move();,您将在myClass 的新实例上执行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2013-03-20
    • 2016-10-04
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多