这是代码:
public class Main {
public static void main(String[] args) {
new Picture().edit();
}
}
为什么图片前面有括号?
有一个Picture 类,它有一个edit 方法,但是picture 类也有一个Picture 方法。
这里发生了什么?
是否正在创建 Picture 类,它调用了它的图片方法,同时也调用了编辑方法?
谢谢
您在这里所做的只是Picture
通过无参数(可能是默认)构造函数创建一个实例。随后,您edit()
在刚刚创建的实例上调用该方法。由于您没有将Picture
实例存储在任何地方,因此可以在方法调用完成后直接进行垃圾收集。
出于所有实际目的,您可以将代码编写为
Picture picture = new Picture();
picture.edit();
请注意,代码段中的任何地方都不涉及Picture
方法。构造函数和方法之间是有区别的。
为什么图片前面有括号?
这就是 Java 中对象创建的简单语法。很明显,如果Picture
构造函数接受了一些参数,那么我们肯定需要这些括号:
new Picture(someArg)
但是我们甚至需要带有 0-arg 构造函数的括号这一事实纯粹是语言设计决定。我相信像 Scala 这样的语言(也可以在 JVM 上运行)你可以不用括号就可以逃脱。
new Picture()
正在实例化一个新的图片对象,它将调用它的构造函数。这.edit();
是一种立即调用的方法。
由于edit()
不是静态的,它需要从实例化的类中运行。
和打字一样
Picture pic = new Picture();
pic.edit();
唯一的区别是pic
可以在以后重用,而不必Picture
每次都实例化和构造一个新对象。
调用它new Picture().edit();
是一种对某事进行一次性调用的人手不足的方法,因为一旦完成执行,垃圾收集就会小心处理。
您正在调用 Picture 类构造函数,然后调用 edit() 函数。如果有一个名为 Picture 的函数,它永远不会被调用。如果愿意,您可以调用它。
Picture pic = new Picture();
pic.edit(); // call edit function
Picture pic = new Picture();
pic.Picture(); // call picture function
这是构造函数,它创建一个新的 Picture 对象。如果构造函数有任何参数,它们将放在括号内。
new Picture()
这里我们在新创建的图片对象上调用edit方法:
new Picture().edit();
由于图片对象未保存,因此之后会丢失。如果您只想进行这一种方法调用,那可能没问题。