构造函数中的代码“void”未执行

时间:2013-06-22 11:17:00

标签: java constructor

如果我这样使用

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()) - 输出为空。为什么这么奇怪?

8 个答案:

答案 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)

其java语言规范。

Docs saying

  

一个类包含被调用以从类蓝图创建对象的构造函数。构造函数声明看起来像方法声明 - 除了它们使用类的名称并且没有返回类型。

答案 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,那么它将不再是构造函数。它就像一种方法。