for example
A级{
void A()//其中A是构造函数,返回类型是void,它是有效的
{
}
public static void main(string arg [])
A =新A();
构造函数没有结果/返回类型 .
如果将结果/返回类型添加到"constructor",则将其转换为名称与类名相同的方法 . 然后 new 将无法使用它,并且方法中的任何 this(...) 或 super(...) 调用都将是语法错误 .
new
this(...)
super(...)
对于您的示例,您实际上不会收到错误 . 这是因为Java会为 A 添加一个默认的no-args构造函数...因为你实际上没有定义任何构造函数 . 您的示例中的 new 实际上将使用默认构造函数....
A
如果您将代码更改为:
class A { void A() { System.err.println("hello"); } public static void main(string arg[]) { A a = new A(); } }
编译并运行它,你应该看到它没有给你任何输出 . 删除 void ,您将看到输出 .
void
所以这里A()作为一种方法
它>>是<<一种方法 . 但它并非“有效” . 正如我的示例版本所示......根本没有调用该方法 .
您对代码编译的原因感到困惑 . 这是因为 A() 实际上不是构造函数,而是一个方法(遗憾的是它与该类具有相同的名称) . 类 A 有一个隐式的默认构造函数,由 main 使用 . 不使用方法 A() .
A()
main
正如其他人所指出的那样,构造函数没有返回类型 .
2 回答
构造函数没有结果/返回类型 .
如果将结果/返回类型添加到"constructor",则将其转换为名称与类名相同的方法 . 然后
new
将无法使用它,并且方法中的任何this(...)
或super(...)
调用都将是语法错误 .对于您的示例,您实际上不会收到错误 . 这是因为Java会为
A
添加一个默认的no-args构造函数...因为你实际上没有定义任何构造函数 . 您的示例中的new
实际上将使用默认构造函数....如果您将代码更改为:
编译并运行它,你应该看到它没有给你任何输出 . 删除
void
,您将看到输出 .它>>是<<一种方法 . 但它并非“有效” . 正如我的示例版本所示......根本没有调用该方法 .
您对代码编译的原因感到困惑 . 这是因为
A()
实际上不是构造函数,而是一个方法(遗憾的是它与该类具有相同的名称) . 类A
有一个隐式的默认构造函数,由main
使用 . 不使用方法A()
.正如其他人所指出的那样,构造函数没有返回类型 .