java中参数化构造函数的用途是什么?

java中参数化构造函数的用途是什么?,java,oop,constructor,Java,Oop,Constructor,我是java的初学者,我想简单地了解一下为什么应该使用参数化构造函数而不是编译器提供的默认构造函数 谢谢您需要随时使用参数化对象,以便将任何类型的配置传递到对象中。您可以使用setter在以后传递该信息,但不仅在构造时传递该信息更短更干净,而且符合创建不可变对象的良好实践,这些对象在构造后无法修改,并且没有setter。比如说, class Student { private final String name; private final Date birthday; public

我是java的初学者,我想简单地了解一下为什么应该使用参数化构造函数而不是编译器提供的默认构造函数


谢谢

您需要随时使用参数化对象,以便将任何类型的配置传递到对象中。您可以使用setter在以后传递该信息,但不仅在构造时传递该信息更短更干净,而且符合创建不可变对象的良好实践,这些对象在构造后无法修改,并且没有setter。比如说,

class Student {
  private final String name;
  private final Date birthday;
  public Student(String name, Date birthday) {
    this.name = name;
    this.birthday = birthday;
  }
}  

与任何面向对象语言一样,构造函数方法用于为对象分配和初始化内存。记住这一点,参数化构造函数方法用于将对象的属性设置为特定值,而默认方法不会将任何值设置为任何属性。

除了Louis Wasserman所说的,从逻辑角度来看,参数化构造函数在许多情况下都是有意义的。假设您要创建一个Employee对象。员工必须具备某些属性,比如姓名、社会保险号码、公司,当然还有工资(奴役是非法的)。因此,创建需要上述4个变量的参数化构造函数是合乎逻辑的

默认情况下,对象的所有属性都设置为0,等等。如果要立即设置属性,可以使用参数化构造函数。当然,还可以使用自己的构造函数在创建对象之前(技术上是在创建对象时)执行代码

顺便说一下:“默认设置不会为属性设置任何值”的回答是错误的。例如,此代码:

public class Test {
    private int test;
    private boolean test2;

    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.test);
        System.out.println(test.test2);
    }
}

将打印出“0”和“false”。

构造函数帮助类初始化并设置传递给它的某些属性的值。这可能是类的当前对象。 例如


希望这能有所帮助。

在Java中,构造函数是Java运行时在对象创建过程中使用
new
操作符调用的方法。创建构造函数的原因可能是:

  • 使用默认或初始状态初始化对象,因为默认值可能不是您要查找的值。例如,如果您有一个包含姓名和出生日期的person类,则希望这些字段被填充,而不是为空。因此,您可以将名称和出生日期的值传递给该类的构造函数,以便为对象分配一个在该类中使用的值

    • 我很惊讶没有人在这个线程中提出重载问题。参数化构造函数还允许用户根据创建时的信息在不同程度上设置对象。可以通过方法重载来实现这一点

      例如:

      public Car(long vin){
          this.vin = vin;
      }
      
      将设置仅具有vin编号的汽车对象,而:

      public Car(long vin, String make){
          this.vin = vin;
          this.make = make;
      }
      

      将创建具有附加信息的类似汽车对象。除了重载之外,您还应该研究复制构造函数,以了解“浅”对象副本与“深”对象副本的区别。下面的链接有一个不错的例子:

      如果您想在创建时设置某些变量,那么您可以使用参数化构造函数。Ex
      Student s=新学生(“Rob”)public Car(long vin, String make){
          this.vin = vin;
          this.make = make;
      }