Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个非静态方法调用非静态方法_Java_Non Static - Fatal编程技术网

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当然这取决于上下文,但大多数情况下,如果您可以在当前实例中访问该方法,则首选该方法,而不是创建该类的新实例。