Java 这是一个方法还是一个构造函数?

Java 这是一个方法还是一个构造函数?,java,Java,我正在阅读其他人的代码,被这段代码弄糊涂了: public static Builder Builder() { return new Builder(); } 这是一个构造函数吗?构造函数通常没有“return”语句。常规方法不使用大写的“Builder()”。我感到困惑。构造函数不能是静态的,不能返回任何东西。 因此,这是一种方法。不,请参见 在所有其他方面,构造函数声明看起来就像一个 没有结果的方法声明(§8.4.5) 与方法不同,构造函数不能是抽象的、静态的、

我正在阅读其他人的代码,被这段代码弄糊涂了:

public static Builder Builder() {
        return new Builder();
    }

这是一个构造函数吗?构造函数通常没有“return”语句。常规方法不使用大写的“Builder()”。我感到困惑。

构造函数不能是静态的,不能返回任何东西。 因此,这是一种方法。

不,请参见

在所有其他方面,构造函数声明看起来就像一个 没有结果的方法声明(§8.4.5)

与方法不同,构造函数不能是抽象的、静态的、最终的, 本机、strictfp或同步


方法名称应重命名为
builder

它是一种使用默认构造函数
builder()
返回
builder
的新实例的方法,而不是构造函数。

将构造函数与方法区分开来的关键特性是返回类型。所以

    /* optional modifiers */ Builder()
生成器的构造函数1,但

    /* optional modifiers */ Builder Builder()
是一个名为
Builder
的方法,它返回
Builder
对象。这也是一种令人震惊的风格冲突,因为Java方法应该以小写字母开头。除此之外,这使得人类更容易区分方法和构造函数!(尽管编译器不在乎……)

还有其他的迹象。有些修饰符允许用于方法,但不允许用于构造函数。例如,
静态
修饰符

简而言之,您的示例是一个method2


1-请注意,构造函数名称必须与封闭类名匹配。但是如果你弄错了,编译器仍然会称之为构造函数。。。在编译错误中


2-我们可以进一步将其归类为静态工厂方法。但是,这是一种设计分类,与Java语言本身无关。

它是一种使用无参数构造函数(默认构造函数)返回生成器实例的方法

除此之外,下面是编写构造函数的规则

  • 类的构造函数必须与它所在的类名同名
  • Java中的构造函数不能是抽象的、最终的、静态的和同步的
  • 可以在构造函数声明中使用访问修饰符来控制其访问,即哪个类可以调用构造函数

  • 它是一个方法…它是一个创建生成器类实例的方法。似乎有人不知道java代码约定,但尝试使用factory设计模式:)方法,构造函数不是静态的。不使用大写的
    Builder()
    是一个约定(应该命名为
    Builder()
    )。构造函数没有返回类型或值是一种语言规则,并且始终为true。