为什么Java允许具有类名和void类型的方法?

15

Java允许创建一个方法,其名称与类名相同且返回类型为void(类似于无参构造函数)。构造函数没有返回类型,并且它执行构造函数的功能。但是上述方法有什么用途呢?你能举出这些方法的使用示例吗?

示例代码:

//my class
class MyClass{

    //constructor
    public MyClass(.....){
    }

    //What is the use of the below method
    public void MyClass(....){
    }
}

这可能是你正在寻找的内容: https://dev59.com/iXA75IYBdhLWcg3wPmd8 - Bk Santiago
一个构造函数是一种“特殊”的方法。编译器和语言会对它进行不同的处理。它明确地返回类的实例(即public MyClass MyClass(...) {...}),因此它逃避了正常的方法命名限制。话虽如此,以大写字符开头创建方法将违反Java命名约定 ;) - MadProgrammer
构造函数在字节码级别上具有名称 <init> 和返回类型 void,因此不会产生冲突。静态类初始化器被称为 <clinit> - Peter Lawrey
5个回答

15
为了回答你的问题:,它没有特殊的用途。实际上,它是反直觉和令人困惑的。一些编译器甚至会生成一个警告信息"This method has a constructor name"
但是因为在技术上它可能 不是 编译错误,我建议远离它。有几种不同的方法名称可以更加描述性,并且具有相同的作用。

2
我不认为所有的Java编译器都会警告你这个问题... - Stephen C
那是一个安全的假设。已经修复。 - rocketboy

2

是的,对于Java新手来说可能会感到困惑。构造函数不能有返回类型。但是一些人误解了 "没有返回类型" 和 "void" 是相等的,但事实并非如此。构造函数和具有类名和任何其他返回类型(void、String、int等)的方法是不同的。但这更加令人困惑。


2

如果一个方法的名称与类名相同,则没有合理的用途。

  • 这是一种风格违规。根据官方的Java样式指南,Java方法的名称应以小写字母开头。

  • 这会导致混淆,因为它表面上看起来像构造函数。

  • 这会导致混淆,因为当您使用这样的方法时,它看起来像您错误地使用了类名。

  • 由于类名与方法名的歧义,可能会导致意外行为和/或意外编译错误。


为什么Java允许具有类名和void类型的方法?

基本上,这是因为Java语言不强制执行标识符样式规则。(在我看来,如果它确实执行了这些规则,会更好...但是决定早在很久以前就已经做出了,并且由于兼容性原因无法更改。)


2

1

使用方法与任何其他方法相同。返回类型不需要是 void。通常会令人感到困惑,但将方法命名为类名相同是完全合法的。这通常会引起比您想要的更多的混乱,但这是一种合法行为。这些方法除了任何其他类方法外没有特殊属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接