1

这是代码:

public class Main {
   public static void main(String[] args) {
        new Picture().edit();
    }
}

为什么图片前面有括号?

有一个Picture 类,它有一个edit 方法,但是picture 类也有一个Picture 方法。

这里发生了什么?

是否正在创建 Picture 类,它调用了它的图片方法,同时也调用了编辑方法?

谢谢

4

4 回答 4

4

您在这里所做的只是Picture通过无参数(可能是默认)构造函数创建一个实例。随后,您edit()在刚刚创建的实例上调用该方法。由于您没有将Picture实例存储在任何地方,因此可以在方法调用完成后直接进行垃圾收集。

出于所有实际目的,您可以将代码编写为

Picture picture = new Picture();

picture.edit();

请注意,代码段中的任何地方都不涉及Picture 方法。构造函数方法之间是有区别的。


为什么图片前面有括号?

这就是 Java 中对象创建的简单语法。很明显,如果Picture构造函数接受了一些参数,那么我们肯定需要这些括号:

new Picture(someArg)

但是我们甚至需要带有 0-arg 构造函数的括号这一事实纯粹是语言设计决定。我相信像 Scala 这样的语言(也可以在 JVM 上运行)你可以不用括号就可以逃脱。

于 2013-10-17T18:56:10.947 回答
2

new Picture()正在实例化一个新的图片对象,它将调用它的构造函数。这.edit();是一种立即调用的方法。

由于edit()不是静态的,它需要从实例化的类中运行。

和打字一样

Picture pic = new Picture();
pic.edit();

唯一的区别是pic可以在以后重用,而不必Picture每次都实例化和构造一个新对象。

调用它new Picture().edit();是一种对某事进行一次性调用的人手不足的方法,因为一旦完成执行,垃圾收集就会小心处理。

于 2013-10-17T18:56:22.027 回答
2

您正在调用 Picture 类构造函数,然后调用 edit() 函数。如果有一个名为 Picture 的函数,它永远不会被调用。如果愿意,您可以调用它。

Picture pic = new Picture();
pic.edit(); // call edit function

Picture pic = new Picture();
pic.Picture(); // call picture function
于 2013-10-17T18:57:10.333 回答
1

这是构造函数,它创建一个新的 Picture 对象。如果构造函数有任何参数,它们将放在括号内。

new Picture()

这里我们在新创建的图片对象上调用edit方法:

new Picture().edit();

由于图片对象未保存,因此之后会丢失。如果您只想进行这一种方法调用,那可能没问题。

于 2013-10-17T18:58:12.617 回答