setter 方法和构造函数方法有什么区别?

What is the difference between setter methods and constructor methods?

public class Person
{
    private String name;
    private String streetAddress;
    private String cityStateZip;

    public Person()
    {
        name = "John Doe";
        streetAddress = "55 Main Street";
        cityStateZip = "Anywhere, MA 00001";
    }

    public Person(String n, String s, String c)
    {
        name = n;
        streetAddress = s;
        cityStateZip = c;
    }
    public String getName()
    {
        return this.name;
    }
    public void setName()
    {
    this.name = name;
    }
    public String getStreetAddress()
    {
        return this.streetAddress;
    }
    public void setStreetAddress()
    {
        this.streetAddress = streetAddress;
    }
    public String getCityStateZip()
    {
        return this.cityStateZip;
    }
    public void setCityStateZip()
    {
        this.cityStateZip = cityStateZip;
    }
    public String toString()
    {
        String str =    name + "\n" + streetAddress + "\n" + cityStateZip + "\n";
        return str;
    }

}

在上面的代码中,我写了一个 class,它将创建一个人对象,并将用于创建其他 classes 来实现这个人 class。当我写这个 superclass 时,我想,setter 方法和构造函数有什么区别? setter 方法是否只是有用,因为您可以轻松地执行 .set(methodName) 或?有人愿意解释我的构造函数和 setter 方法之间的区别吗?

构造函数构造新对象,其中创建 setters 来更新该对象。

所以假设你的名字叫叮咚,你住在这里,你用你的名字和地址创建了一个人对象。

12345 15th Street
Area 51, Nevada 12345

然后您沿着街道移动几个街区到达:

1234 15th Street
Area 51, Nevada 12345

好吧,你不需要创建新的 Person 对象,因为你搬家了,你只需要更新地址。这就是您将使用 setter 方法的地方。

结论: 设置器用于更新您的记录,构造器用于创建新的 Person 对象。

希望对您有所帮助!!!

Setter 设置先前创建的对象属性的值。 您的构造函数使用一堆预定义值创建对象。

Class Pizza
Attributes: boolean Extra Cheese , boolean Extra mayonnaise

Ex 构造函数调用:

Pizza Margherita = new Pizza(true, false) //sets value of attributes, i.e you want extra cheese or mayonnaise?

Ex setter 呼叫:

Pizza Marinara= new Pizza();
public void setCheese (boolean cheese ) {      //sets the values explictly 
        this.cheese  = cheese ;
    }
public void setMayonnaise (boolean mayonnaise) {
        this.mayonnaise= mayonnaise;             //sets the value explictly
    }

当我们需要创建具有属性值的对象时,我们应该使用构造函数方法,而不是为每个值显式调用 setters 并设置它们。

尽管两者具有不同的优势并且非常适合 Java 生态系统。 如果你想要一个不可变的 class 使用构造函数,否则使用 setters.

如果你想要一个不可变的 class 使用构造函数,否则使用 setters.

使用 Setters() 或修改器,为调用者提供机会 更新 特定实例变量的值。


更多:

构造函数不需要访问说明符return类型,而setters需要访问说明符.

Setters

  1. Setter 方法可以具有传入数据的业务逻辑和验证。它们的效果最好,尤其是当涉及到状态短暂或变化很大的对象时
  2. Setter 方法与 getter 方法一起使用时会更有帮助,因为这样可以加强 Java 中 OOP 的 'Encapsulation' 属性 ].您的实例变量可以完全私有。您甚至可以让您的对象也对外界隐藏。您可以查看私有构造函数和工厂方法以供参考
  3. Return 需要明确提及类型

构造函数

  1. 它仅在创建对象时使用,因此您编写的任何逻辑和验证都需要在其他方法中再次单独实现以更新对象的数据
  2. 它们有一个隐含的 return 类型,所以我们不需要写任何东西。如果我们编写任何 return 类型,那么该方法不会被视为构造函数