如何在不在构造函数中传递参数的情况下创建对象的实例?

how to create instance of a object without passing argument in constructor?

我有一个学生 class 并且它有构造函数 Student(int id, string name)

现在,我想在不触及构造函数的情况下创建 Student Class 的对象。我该怎么做?

喜欢Student std = new Student();

不是Student std = new Student(1, "Benjamin");

您必须创建无参数构造函数 - Student()。如果您没有 Student(int id, string name) 构造函数,编译器会自动创建一个空的无参数构造函数。

创建一个default constructor,喜欢

Student();

在Java中,默认构造函数指的是nullary constructor,如果没有为[=定义构造函数,则由编译器自动生成。 30=]。默认构造函数隐式调用 superclass 的 nullary 构造函数,然后执行一个空主体。也可以自己写。

请注意,根据您的编码设计和要求,可以有多个构造函数。说,

class Student {  

    // default constructor
    public Student() {}

    // one param constructor
    public Student(int id) {
        this.id = id;
    }

    // two param constructor
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

如果你有默认构造函数,那么没有

Student std = new Student(1, "Benjamin");

您可以创建一个 std 对象,例如:

Student std = new Student();

您应该在 class:

中创建第二个没有参数的构造函数(所谓的 "default constructor")
class Student {
    int id;
    String name;

    // new constructor
    public Student() {
    }

    // old constructor: we don't change it.
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

您必须添加一个不带参数的构造函数。

请注意,这是仅用于学术目的的解决方案:如果您不喜欢创建不带参数的新构造函数,还有另一种可能性。删除带参数的构造函数,如果你这样做,一个不带参数的默认构造函数会自动添加到你的 class。显然,如果你这样做,你必须更改现有代码,用不带参数的新代码替换对参数化构造函数的旧调用!

你可以这样做;如果您的 class 具有默认的空构造函数和 setter 方法:

Student st = new Student();
st.setId(1);
.
..

我有同样的问题,尽管应该自动实现的默认构造函数应该允许没有参数的对象。错误状态:无法解析构造函数。 :(

User user = new User();
user.setUsername(registerRequest.getUsername());
user.setPassword(registerRequest.getPassword());
user.setEmail(registerRequest.getEmail());

所以用户();需要参数,我无法将所有其他代码行与 user

一起应用