构造函数与Java中的常规方法有何不同?

时间:2015-04-24 10:30:02

标签: java oop constructor

我在一篇关于Aspects的Spring教程中阅读了以下内容。

  

与大多数其他OOP语言中的构造函数不同,Java构造函数与常规方法不同。

这是真的吗?如果是,为什么以及如何?我理解构造函数与普通方法的区别和重要性。但是,C ++中的差异是否与Java相同?或者,Java中存在这种差异还有其他调整吗?

我的观点主要集中在与C ++等其他OOP语言的比较上。

A 是Java中构造函数和Normal方法之间区别的解释。说 B 是任何其他OOP语言中构造函数和Normal方法之间差异的解释。我想知道 A和B之间的区别,如果有的话?

2 个答案:

答案 0 :(得分:1)

构造函数与类具有完全相同的名称,并且根本没有任何返回类型,甚至无效。构造函数对于为某些成员变量设置初始值非常有用。

构造函数和方法在签名的三个方面有所不同:修饰符,返回类型和名称。与方法类似,构造函数可以具有任何访问修饰符:public,protected,private或none(通常称为包或友好)。与方法不同,构造函数只能使用访问修饰符。因此,构造函数不能是抽象的,最终的,本机的,静态的或同步的。

返回类型也非常不同。方法可以具有任何有效的返回类型,也可以不具有返回类型,在这种情况下,返回类型为void。构造函数没有返回类型,甚至没有返回。

答案 1 :(得分:0)

让我们考虑一下这条指令:

Foo a = new Foo();

第一部分new Foo();是组合运算符(new)和操作数(Foo())的操作。在幕后,这会在堆中分配大小为Foo 的内存,最后通过调用我们称之为构造函数来填充它并返回一个引用这个新创建的对象。

第二部分Foo a =声明了一个Foo类型的变量,它记忆了上面部分给出的参考。

现在我们有一个Foo实例的引用,我们可以调用这个对象的一些方法。例如:

a.makeNoise();

无法使用new运算符调用方法(语法上不正确),并且不在堆上分配一些内存,而是执行指令列表。

总之,构造函数与方法不同,因为它们不能在相同的情况下使用,也不能在幕后进行相同的工作。

相关问题