为什么我们不能在构造函数重载中使用多个this()?

why we can't use multiple this() in Constructor Overloading?

提问人:Ayoub Bentameur 提问时间:9/28/2022 更新时间:10/17/2022 访问量:147

问:

我是这个世界的新手,目前我正在学习 Java,我想知道为什么我不能在构造函数中使用多个 this(),有人可以告诉我为什么?

public class Student {
        private String name;
        private int age;
        public Student(String name) {
            System.out.println("Name of Student : " + name);

        }

        public Student(int age)
        {
            System.out.println("Age of student = " + age);

        }

      public Student()
        {
         this("Alex");
         this(22); //Error in this line:Call to 'this()' must be first statement in constructor body
        }

        public static void main(String[] args){
            Student student=new Student();
        }
    }
java 构造函数 this constructor-overloading

评论

2赞 f1sh 9/28/2022
因为该语言只允许其中之一。它是对象创建的一部分。可以这样想:多次调用将在构造函数的执行中创建多个实例。您可以将这两种情况组合成一个 this(“Alex”, 22);'。this(..)Student(String name, int age) constructor though and then call that using

答:

1赞 ikanayu 9/29/2022 #1

从一个新手 java 编码员到另一个新手的类比:

您登录您的星巴克应用程序,希望下一个新的饮料订单。(1) 如果您在星冰乐图像上点击“一键购买!”,它将创建一个包含星冰乐的新订单,完成订单,然后一次性下达。(2)或者,您只需单击“开始新订单”按钮,您的购物车中就没有任何东西了。第二个选项是你选择在代码中执行的操作。请记住:“new Student();”是一个新订单,因为只有一个关键字。

如果您曾经尝试过下订单,您就会知道,如果订单不包含任何内容,您就无法下订单。因此,它不会立即将其发送到您的星巴克门店,而是让您有机会将商品添加到您的订单中。您想要的订单中的所有内容都位于括号 () 之间。当你打电话给“this(”Alex“);”时,你实际上是在用一种“Alex”饮料填充你的订单,然后放下它,因为你关闭了括号(告诉应用程序,“这是我的购物车里的东西”)。

当您调用“this(22)”时,您的代码会感到困惑,因为您正在尝试将 22 杯饮料添加到您已经下达的订单中。您不能点一杯饮料,然后在 5 分钟后,在同一订单中添加另一杯饮料。

建议:创建一个构造函数 Student(name, age) 并调用 this(“Alex”, 22)。

或者:在 Student(String) 中调用 this(22)!

0赞 PrabaKaran s 10/17/2022 #2

使用此关键字在其他构造函数中调用当前类构造函数的主要目的。

您可以在构造函数的第一行中调用当前类构造函数,否则会出现编译时错误。

如果创建对象以首先调用构造函数,请检查它们是否存在任何当前类构造函数,如果存在,请首先执行构造函数,然后执行此构造函数。

为什么我们不能在一个构造函数中使用多个this()?因为在构造函数内部,您可以一次调用一个构造函数。