如果我这样使用
class Test {
public Test() {
System.out.println("constructor");
}
}
public class MainClass {
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
}
}
我得到2个输出 构造函数 构造
但是如果我向构造函数添加void(public void Test()) - 输出为空。为什么这么奇怪?
答案 0 :(得分:10)
这并不奇怪,这是它的正常行为。构造函数没有返回类型
public Test() {
System.out.println("constructor");
}
是构造函数,但是
public void Test() {
System.out.println("constructor");
}
是一种可以使用t1.Test()
调用的简单方法。
This page列出了构造函数和方法之间的差异:
1)Java中方法与构造函数之间的第一个区别是构造函数的名称必须与Class的名称相同,但Java中的方法没有这样的要求。方法在Java中可以有任意名称。
2)Java中方法和构造函数之间的第二个区别是构造函数没有任何返回类型,但是方法有返回类型并返回一些东西,除非它是void。
3)Java中构造函数和方法之间的第三个区别是构造函数是链接的,它们是按特定顺序调用的,没有这样的方法工具。
4)与方法不同,构造函数在类中声明并不被视为Class的成员。构造函数不是由子类继承的,但是子类继承了方法,直到它们变为私有。在哪种情况下,它们仅在声明它们的类中可见。类似地,私有构造函数意味着你不能从外部创建该类的对象,这是用于在Java中实现Singleton模式的技术之一。
5)Java中方法和构造函数之间的另一个区别是,特殊关键字this和super用于显式调用构造函数。对于方法没有这样的东西,他们有自己的名字可以用来称呼它们。
答案 1 :(得分:5)
因为如果将void
添加到不再是构造函数的构造函数中。它只是一个恰好与类同名的方法。
然后,你可以问“但如果一个不存在,我怎么能调用构造函数?”好吧,每个类都有隐式的,没有args的构造函数。
结论:构造函数不能有返回类型。
答案 2 :(得分:2)
构造函数没有返回类型.Methods有返回类型。如果你添加void()
,那么它将转向一种方法。要调用该方法,您需要调用它。
t1.test();
答案 3 :(得分:1)
答案 4 :(得分:1)
当你写:
public Test()
{
System.out.println("constructor");
}
这绝对是一个构造函数。并且,当您通过编写:
创建Test类的第一个对象时 Test t1 = new Test();
这将首次调用您的构造函数,并且您在print语句中编写的代码,即构造函数将在控制台上打印。 请记住,在创建类的对象时会自动调用构造函数。
第二次通过编写创建对象:
Test t2 = new Test();
这将调用相同的构造函数,并在屏幕上打印相同的“构造函数”,但这将是第二次。
所以你得到了答案 - 构造函数 构造
在第二种情况下,当你写:
public void test()
{
System.out.println("constructor");
}
您的编译器会将其视为方法而不是构造函数。
即使void没有返回任何内容,它也是一个“返回类型”,构造函数永远不会有返回类型。 这并不意味着他们不会给你任何回报,但他们只是没有返回类型。
因此,在创建类的对象时不会自动调用方法。所以,你不应该期望相同的结果。
现在,您得到一个空输出,因为编译器为每个类提供了一个虚拟/默认构造函数,即使您没有定义它。并且,无论您是否明确地调用它,每次创建类的对象时都会调用此默认构造函数!
默认构造函数可以被认为是在某处写的:
test() { }
所以现在你可以想象当你创建两个对象时会发生什么,程序会编译并正确运行,返回空输出给你!
我希望能帮助你。
答案 5 :(得分:0)
因为构造函数没有返回类型。添加void
返回类型时创建的是名为Test()
的方法,该方法不返回任何内容。
编译器为你提供了一个no-arg构造函数,因为你没有写任何东西,并且什么也没做,因为它不是你创建的方法。
答案 6 :(得分:0)
java构造函数与其所属的类的名称相同。构造函数的语法不包含返回类型,因为构造函数永远不会返回值。
public Test() {
System.out.println("constructor");
}
答案 7 :(得分:0)
如果将返回类型添加到Constructor,那么它将不再是构造函数。它就像一种方法。