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