【问题标题】:How do you define a constructor in Java?如何在 Java 中定义构造函数?
【发布时间】:2015-12-12 04:25:43
【问题描述】:

我是 Java 新手,所以我不确定我的代码到底有什么问题。我不断遇到未解决的编译问题:构造函数 Student() 未定义。我已经为此工作了几个小时,但我不确定问题是什么。我将不胜感激。谢谢!

【问题讨论】:

  • 您的构造函数定义正确,但需要参数。您的主类没有将任何参数传递给构造函数。 (另外,最好将您的代码包含为文本,而不是图像)
  • 谢谢!我应该把参数放在哪里? Student beststudent = new Student(在里面?);
  • Jorge,请参阅下面的问题并标记解决您问题的问题,他们已经回答了该问题:)
  • Oracle 的教程已经有了你需要的所有基本信息:docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

标签: java object constructor compiler-errors undefined


【解决方案1】:

您正确地创建了构造函数:

public Student (String n, char g, Date b, Preference p){
     name = n;
     gender = g;
     birthDay = b;
     pref = p;
}

但是,这个构造函数只能在所有给定参数的情况下工作。您正试图将一个没有参数的 Student 对象放入构造函数中。这种情况称为默认构造函数。

要创建这样一个构造函数,你应该这样做:

public Student (){
     //some default initializations
}

【讨论】:

    【解决方案2】:

    您正在使用

    实例化一个学生
    new Student()
    

    这是错误的,因为您还没有定义不带参数的构造函数。

    你可以通过定义一个新的构造函数来修复它

    public Student(){
       //Set default values here
    }
    

    或者使用你已有的构造函数。

    Student bestStudent = new Student("Bryan", 'm', ...);
    

    【讨论】:

      【解决方案3】:

      当您没有定义类时,Java 为类提供了默认构造函数(在本例中为 Student() )。但是,由于定义了构造函数 Student(String s, char c, Date d, Preference p),因此不会自动提供此默认构造函数。

      您现在必须使用您指定的构造函数。或者在 Student 类中实现一个不接受参数的构造函数

      public Student() { }
      

      您可以使用它来使用您的默认变量调用另一个构造函数。

      public Student() {
      
           this("", '', null, null); //Assuming you code is made to handle such a situation
      }
      

      【讨论】:

        【解决方案4】:

        您正在调用没有参数的 new Student()。这称为默认构造函数。如果没有其他构造函数,则不必指定默认构造函数。但是如果你有另一个带参数的构造函数,那么你必须指定它。

        您只需将其添加到您的学生课程中。

        public Student(){
        }
        

        【讨论】:

          【解决方案5】:

          您需要为n、g、b、p 传递一个值。

          所以new Student("hi", 'a', new Date(), myPreference)

          【讨论】:

            【解决方案6】:

            当您在 Student() 中初始化变量时,它们应该有修饰符:

            private String name; private char gender; private Boolean matched;

            等;这可能是您的错误的原因。

            【讨论】:

              【解决方案7】:

              将另一个名为 no-argument constructor 的构造函数添加到您的学生班级。因为在for 循环中,您使用的是不带任何参数的循环。而且您还没有在 Student 类中定义它。

              只需添加以下几行。

              public Student() {
              }
              

              【讨论】:

                【解决方案8】:

                示例:如果您有名为 Main 的类 所以你可以为这个类定义构造函数,比如:

                Main(){
                
                }
                

                有关构造函数的更多详细信息,请参阅this link。

                【讨论】:

                猜你喜欢
                • 2021-11-19
                • 2011-04-11
                • 1970-01-01
                • 2015-12-14
                • 2022-01-02
                • 1970-01-01
                • 2015-02-12
                • 1970-01-01
                相关资源
                最近更新 更多