带有“void”的构造函数中的代码不执行

如果我这样使用

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

这并不奇怪,这是它的正常行为。 构造函数没有返回类型

 public Test() { System.out.println("constructor"); } 

是一个构造函数,但是

 public void Test() { System.out.println("constructor"); } 

是一个简单的方法,您可以使用t1.Test()调用。

此页面列出了构造函数和方法之间的差异:

1)Java中方法与构造函数之间的第一个区别是构造函数的名称必须与Class的名称相同,但Java中的方法没有这样的要求。 方法可以在Java中具有任意名称。

2)Java中方法和构造函数之间的第二个区别是构造函数没有任何返回类型,但是方法有返回类型并返回一些东西,除非它的void。

3)Java中构造函数和方法之间的第三个区别是构造函数是链接的,它们是按特定顺序调用的,没有这样的方法工具。

4)与方法不同,构造函数在类中声明不被视为类的成员。 构造函数不是由子类inheritance的,但是子类inheritance了方法,直到它们变为私有。 在哪种情况下,它们仅在声明它们的类中可见。 类似地,私有构造函数意味着您无法从外部创建该类的对象,这是用于在Java中实现Singleton模式的技术之一。

5)Java中方法和构造函数之间的另一个区别是特殊关键字this和super用于显式调用构造函数。 对于方法没有这样的东西,它们有自己的名字可以用来调用它们。

因为如果将void添加到不再是构造函数的构造函数中。 它只是一个恰好与类同名的方法。

然后,你可以问“但如果一个不存在,我如何调用构造函数?” 好吧,每个类都有隐式的,无参数的构造函数。

结论:构造函数不能有返回类型。

构造函数没有返回类型。方法有返回类型。 如果你添加void()然后它转向一个方法。 要调用该方法,您需要调用它。

 t1.test(); 

它的java语言规范。

文件说

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

当你写:

 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() { } 

所以现在你可以想象当你创建两个对象时会发生什么,程序会编译并正确运行,返回空输出给你!

我希望能帮助你。

因为构造函数没有返回类型。 添加void返回类型时创建的是名为Test()的方法,它不返回任何内容。

编译器为你提供了一个无参数的构造函数,因为你没有写任何东西,并且什么也没做,因为它不是你创建的方法。

java构造函数与其所属的类的名称具有相同的名称。 构造函数的语法不包含返回类型,因为构造函数永远不会返回值。

  public Test() { System.out.println("constructor"); } 

如果将返回类型添加到Constructor,那么它将不再是构造函数。 它就像一种方法。