Java 创建对象有几种方式?

在Java中,创建对象通常有两种主要方式:实例化和构造器模式。

实例化:实例化是指创建一个新的对象,该对象与给定的类具有相同的类型和属性。实例化通常使用关键字“new”和类名来完成。

Object obj = new Object();

构造器模式:构造器模式是一种创建对象的方式,该对象在创建时不需要显式地调用构造函数。相反,构造器模式使用构造函数接口来定义对象的构造行为。通过实现该接口,您可以定义一个无参构造函数或带参数的构造函数,并在创建对象时传递参数。

public class Car {  
  private Engine engine;  
  private String color;  
    
  public Car(String color) {  
      this.color = color;  
      engine = new Engine();  
  }  
    
  public void start() {  
      engine.start();  
  }  
    
  public void stop() {  
      engine.stop();  
  }  
}

在上面的示例中,Car类具有一个名为engine的私有成员变量,该变量是一个引擎对象。构造函数接口Car.Builder定义了一个带有一个参数的构造函数,该参数是一个名为color的字符串。这意味着可以在Car对象中使用color变量,而无需显式地调用构造函数。

构造器模式还使用Builder设计模式。Builder接口提供了一种创建Car对象的方法,该方法使用构造函数接口来定义对象的构造行为,并将color字符串传递给构造函数。然后,您可以使用Builder设计模式创建一个Car对象,并将其与任何其他字符串一起使用,而无需显式地调用构造函数。

总之,实例化是Java中创建对象的主要方式,而构造器模式是一种创建对象的方式,该对象在创建时不需要显式地调用构造函数。

Car 类还包含一个名为clone()的私有方法。

对于构造器模式,它有两个角色:类和它的构造器。在上面的示例中,我们实现了 Car 类,并创建了一个构造函数。Car 类还包含一个名为 clone() 的私有方法,该方法返回 Car 类的一个副本。这使得可以使用 clone() 方法来创建 Car 类的多个副本,而无需显式地调用构造函数。

以下是一个完整的示例:

public class Car {  
  private Engine engine;  
  private String color;  
    
  public Car(String color) {  
      this.color = color;  
      engine = new Engine();  
  }  
    
  public void start() {  
      engine.start();  
  }  
    
  public void stop() {  
      engine.stop();  
  }  
    
  public Car clone() {  
      try {  
        return super.clone();  
      } catch (CloneNotSupportedException e) {  
        throw new RuntimeException(e);  
      }  
  }  
}  
  
public class CarBuilder {  
  public static Car build(String color) {  
      return new Car(color);  
  }  
}  
  
public class Main {  
  public static void main(String[] args) {  
      Car car1 = CarBuilder.build("red");  
      Car car2 = car1.clone();  
        
      car1.start();  
      car2.start();  
        
      car1.stop();  
      car2.stop();  
  }  
}

在上面的示例中,CarBuilder 类包含一个名为 build() 的静态方法,该方法返回一个新的 Car 对象。Car 类还包含一个名为 clone() 的私有方法,该方法返回 Car 类的一个副本。这使得可以使用 clone() 方法来创建 Car 类的多个副本,而无需显式地调用构造函数。

通过这种方式,我们可以使用构造器模式来实现无参数的 Car 构造函数,而不需要显式地调用 setXXX() 或 getXXX() 方法。这使得代码更加简洁和易于理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农落落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值