Java “构造函数错误”;对该语句的调用必须是构造函数中的第一个语句;

Java “构造函数错误”;对该语句的调用必须是构造函数中的第一个语句;,java,Java,我正在为一个学校作业写一些代码,我不知道为什么我会不断得到编译错误:“调用这个必须是构造函数中的第一个语句。”我应该创建一个名为student的学生,而不是输入的名称 public void newStudent( ){ this("Student"); //Error occurs here ^ } public void newStudent(String student) { studentAndStatus[studentCount] [0] = student;

我正在为一个学校作业写一些代码,我不知道为什么我会不断得到编译错误:“调用这个必须是构造函数中的第一个语句。”我应该创建一个名为student的学生,而不是输入的名称

public void newStudent( ){
   this("Student");
   //Error occurs here ^
}

public void newStudent(String student)
{
   studentAndStatus[studentCount] [0] = student;
   for(int i = 0; i < 3; i++)
   {
       grades[studentCount] [i] = 0;
   }
   studentCount++;
}
public void newStudent(){
该(“学生”);
//这里发生错误^
}
公共无效新闻学生(字符串学生)
{
studentAndStatus[studentCount][0]=学生;
对于(int i=0;i<3;i++)
{
成绩[学生人数][i]=0;
}
studentCount++;
}

我假设
newStudent()
是一个重载的方法,因为构造函数不能有返回类型

this(arguments)
只能用于构造函数调用,但您正在重载
newStudent()
方法,因此,如果您想调用
newStudent(String student)
,可以按如下所示进行操作:

public void newStudent( ){
   newStudent("Student");//calls the overloaded method
}

当您想要创建类的实例时,应该使用构造函数。例如,构造函数与类具有相同的名称,并且没有声明返回类型

public class Student {
    public Student() {
        this("Student");
    }

    public Student(String name) {
        //Whatever you want to do...
    }
}

在您的情况下,会发生错误,因为您只能在构造函数中调用
this
。由于您的类可能未被调用
newStudent
,并且方法
newStudent()
具有返回类型,因此方法
newStudent()
不是构造函数,因此无法调用

即使它被调用
newStudent
,也存在
void
@chrylis您是对的,我相应地更新了答案。非常感谢。谢谢你的帮助!我通过将此(“学生”)切换为newStudent(“学生”)解决了这个问题。它也需要是静态的。为什么它应该是静态的?如果
newStudent()
是一个工厂方法,那么它需要(1)返回类(例如
Student
),而不是void;(2)它应该是静态的,除非它是一种专门创建一个与现有学生有某种关系的新学生的方法。如果
newStudent
有其他用途,那么这不适用,但似乎OP正试图这么做,也许。我不知道,因为
newStudent
不是一个足以说明方法用途的描述性名称。你能为整个
类添加代码吗?