[英]How are Constructors different from normal methods in Java?
我在有关方面的Spring教程中阅读了以下内容。
与大多数其他OOP语言中的构造函数不同,Java构造函数与常规方法不同。
真的吗? 如果是,原因和方式是什么? 我了解构造函数与普通方法的区别和重要性。 但是,C ++中的差异是否与Java中的相同? 或者,在Java中是否还有其他调整?
我的观点集中在与其他OOP语言(例如C ++)的比较。
说“ A”是Java中的Constructor和Normal方法之间差异的解释。 说B是任何其他OOP语言中的构造方法和Normal方法之间差异的解释。 我想知道A和B之间的区别吗?
构造函数将具有与类完全相同的名称,并且根本没有任何返回类型,甚至没有void。 构造函数对于为某些成员变量设置初始值非常有用。
构造函数和方法在签名的三个方面有所不同:修饰符,返回类型和名称。 与方法一样,构造函数可以具有任何访问修饰符:public,protected,private或不包含(通常称为package或friendly)。 与方法不同,构造函数只能使用访问修饰符。 因此,构造函数不能是抽象的,最终的,本地的,静态的或同步的。
返回类型也非常不同。 方法可以具有任何有效的返回类型,也可以没有任何返回类型,在这种情况下,返回类型为void。 构造函数没有返回类型,甚至没有void。
让我们考虑以下指令:
Foo a = new Foo();
第一部分new Foo();
是将运算符( new
)和操作数( Foo()
)组合在一起的操作。 在幕后,此方法以Foo
类的大小在堆中分配内存,最终通过调用我们称为构造函数的方法来填充内存,并返回对该新创建对象的引用。
第二部分Foo a =
声明一个类型为Foo
的变量,该变量存储了以上部分给出的引用。
现在我们已经引用了Foo
的实例,我们可以调用该对象的一些方法。 例如:
a.makeNoise();
不能使用new
运算符调用方法(语法上不正确),并且不在堆上分配一些内存,而是执行指令列表。
总之,构造函数与方法不同,因为它们不能在相同的情况下使用,并且不能在后台进行相同的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.