Java 从另一个非静态方法调用非静态方法
给定下面的Java 从另一个非静态方法调用非静态方法,java,non-static,Java,Non Static,给定下面的myClass和非静态方法run(),以下代码行是有效的: new myClass().move(); 但是,这也是有效的: move(); 我理解第一次尝试(newmyclass().move())创建类的实例,然后对其调用方法。第二次尝试是否也会做同样的事情,但是隐含的?换句话说,这两次尝试真的是一样的吗?如果没有,根本区别是什么?首选哪一个 OscarRyz在帖子中的评论似乎触及了这一点,但他没有详细说明 class myClass { void move() {
myClass
和非静态方法run()
,以下代码行是有效的:
new myClass().move();
但是,这也是有效的:
move();
我理解第一次尝试(newmyclass().move()
)创建类的实例,然后对其调用方法。第二次尝试是否也会做同样的事情,但是隐含的?换句话说,这两次尝试真的是一样的吗?如果没有,根本区别是什么?首选哪一个
OscarRyz在帖子中的评论似乎触及了这一点,但他没有详细说明
class myClass
{
void move() {
//...some code
}
void run() {
new myClass().move();
}
}
谢谢。它们不一样
如果调用move()
,在当前的myClass
实例上执行该方法(这与this.move();
相同)
如果调用
newmyclass().move()代码>,则在myClass
的新实例上执行它。它不会执行相同的操作
第一次尝试newmyclass().move()代码>创建类的另一个实例,然后在此新实例上调用该方法
但在第二次尝试中,move()代码>只需调用当前实例的方法。您已经初始化了它。与this.move()相同代码>
第二个是首选的,因为您不创建类的另一个实例,而是使用当前的实例。非静态方法属于对象的一个实例(调查“此”以了解更多信息)。仔细考虑在代码中该方法会被认为是“这个”的例子。谢谢,也可以接触到“首选”方法,尽管首选的方法可能取决于具体的上下文。在我的代码上下文中,我同意this.move()
似乎更有效。@sedeh当然这取决于上下文,但大多数情况下,如果您可以在当前实例中访问该方法,则首选该方法,而不是创建该类的新实例。