Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在java中使用setter而不是构造函数?_Java_Constructor_Getter Setter_Setter - Fatal编程技术网

为什么在java中使用setter而不是构造函数?

为什么在java中使用setter而不是构造函数?,java,constructor,getter-setter,setter,Java,Constructor,Getter Setter,Setter,setter在java中只提供构造函数的一个函数,即为实例变量赋值。我们为什么需要它们?你能举例说明吗? 我知道我问的问题是初步的,对此我很抱歉。我是编程新手,当我发现stackoverflow时,我问了这个问题,这个问题困扰了我很长时间。我试图删除,但这是不允许的 因为您可以稍后更改同一实例的值。例如,假设一个人具有以下类别: public class Person { String firstName; String lastName; public Person(String

setter在java中只提供构造函数的一个函数,即为实例变量赋值。我们为什么需要它们?你能举例说明吗?
我知道我问的问题是初步的,对此我很抱歉。我是编程新手,当我发现stackoverflow时,我问了这个问题,这个问题困扰了我很长时间。我试图删除,但这是不允许的

因为您可以稍后更改同一实例的值。例如,假设一个人具有以下类别:

public class Person {
  String firstName;
  String lastName;

  public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
}
想象一下,有一个名叫琳达·克罗夫特的女人现在单身

Person linda = new Person("Linda", "Croft");
几年后,他嫁给了一个名叫约翰·威克的男人。然后琳达想在婚后把她的名字改成他丈夫的名字。如果我们没有setter,我们需要创建另一个Linda,显然是另一个人:

Person anotherLinda = new Person("Linda", "Wick");
使用setter,我们可以使用以下内容更新她的姓名:

linda.setLastName("Wick");

现在Linda的名字是Linda Wick。

Setters允许您在初始化后改变对象的状态。另一方面,构造函数只能设置一次状态。因为很明显,有时您需要更改已经存在的对象中的值。只允许在构造函数中设置值会使每个对象都不可变。你说的构造函数可能不是指构造函数吗?您的意思是设置非私有字段的值吗?