Java Setter 和 Constructor 混淆

标签 java constructor setter

我对如何在 Java 中使用构造函数和 setter 有点困惑,请看下面的示例代码:

public class Name {
   private String name;

   public void setName(String name){
      this.name=name;
   }  
   public String getName(){
      return name;
   }
}

public static void main(String[] args) {
    Name a=new Name();
    a.setName("123");       
    System.out.println(a.getName());
}

它打印出123,它使用了没有构造函数的setter方法,我也写了下面的其他代码:

public class Name {
   private String name;


   public Name(String nm){
      name=nm;
   }
   public String getName(){
      return name;
   }  
}



public static void main(String[] args) {
   Name a=new Name("123");

   System.out.println(a.getName());

}

这个也是打印出123,是用constructor没有setter方法,所以我不明白constructor和setter在使用上有什么区别,求指教,加油!

最佳答案

如果您想更改实例的 name 的值怎么办。当然,您不会为此使用构造函数,因为它会创建一个新实例。在这种情况下,您将使用 setter

当然,如果您正在编写一个不可变类,那么您将不会提供任何setter。实例字段中的任何修改都将创建一个新实例。

这里要理解的更重要的一点是,由于您在第二个代码中提供了参数化构造函数,因此编译器不会添加任何默认构造函数。所以,第二类实际上没有任何 0-arg 构造函数。如果您想稍后使用它,则必须明确添加一个。

关于Java Setter 和 Constructor 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19163598/

相关文章:

javascript - 当需要一个类并调用另一个方法中的方法时,到底发生了什么?

java在子类构造函数中初始化基类字段

c# - Automapper 是否应该与私有(private) setter OOB 一起使用?

javascript - 在 Javascript 中获取 Getter 函数

java - 请求的资源上存在 GWT-No 'Access-Control-Allow-Origin' header

java - 使用java反射获取代理表示的对象

java - 为什么oracle存储过程执行时间根据它的执行方式大大增加?

c++ - 尝试从 C++ 中的构造函数继承类时出错

javascript - 为整个对象定制 getter,而不仅仅是属性?

java - 引用不存在的类/方法的动态加载类何时在 Java 中失败?