【问题标题】:How are Constructors different from normal methods in Java?构造函数与 Java 中的普通方法有何不同?
【发布时间】:2015-07-02 22:02:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你能把你读到这个的链接贴出来吗,它可能有一些上下文来回答你的问题。
  • 我的观点主要集中在与 C++ 等其他 OOP 语言的比较上。
  • 在世界上每一种 OOP 语言中构造函数与普通方法不同。
  • 我在 Craig Walls 的 Spring in Action 第 4 版一书中读到它。
  • 我理解构造函数与普通方法的区别和重要性。但是,C++ 中的差异与 Java 中的差异相同吗?或者,对于 Java 中的这种差异是否有任何其他调整?

标签: java oop constructor


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    Foo a = new Foo();
    

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

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

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

    a.makeNoise();
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2010-12-24
      • 2018-10-24
      • 2017-04-30
      • 2014-11-03
      相关资源
      最近更新 更多