构造函数和类之间的关系如何工作?

时间:2017-03-20 20:38:36

标签: java oop constructor

我已经开始学习OOP并且我理解了类的概念,我理解通过使用构造函数我们可以保护我们的类与程序的其余部分,但我想知道更多关于类和它之间的关系构造函数。

当我设置一个构造函数时,它正在初始化我的实例变量,但它是否复制了我的类,然后我只处理构造函数,或者它被用作我的类和我的程序的其余部分之间的中介,即它将信息传递给班级?

这是我上周制作的一个节目的例子。

class Pets

{

private String breed ;
private String coat ;
private String temperment ;

//constructors with 3 parameters and 3 instance variables.
public Pets ( String aBreed, String aCoat, String aTemperment )

{

breed = aBreed ;
coat = aCoat ;
temperment = aTemperment ;

}

//Setters
public void setBreed ( String aBreed ) { breed = aBreed ; }
public void setCoat ( String aCoat ) { coat = aCoat ; }
public void setTemperment ( String aTemperment ) { temperment = aTemperment ; }


//Getters
public String getBreed() { return breed ; }
public String getCoat() { return coat ; }
public String getTemperment() { return temperment ; }

//petDisplay - A method to print information about pets.
public void petDisplay()

{

System.out.println ( "This pet is a " + breed + ", it has a " + coat + " coat and is " + temperment + "." ) ;

}

4 个答案:

答案 0 :(得分:1)

构造函数不是一种使用实例的方法,而是它们在使用之前应该启动的方式。

例如,在您的代码中,您对将要使用您的课程的所有未来编码员所说的是,如果他们想要宠物,他们必须提供品种,外套和脾气。这是一种确保您的班级没有不良用途的方法。

然后,您拥有用于访问类属性的getter和setter。

最后,这些方法用于提供计算和治疗。

现在是非常好的部分:因为您可以根据需要编写构造函数,所以不应该直接分配属性,只要有可能就使用setter。

为什么?因为这样,您可以检查数据的有效性,如果它们对您的类不好,则拒绝它们。这是一个例子:

public void setBreed(String aBreed)
{
  if(aBreed == null)
  {
    System.out.print("You should give a breed !");
  }
  else
  {
    breed = aBreed;
  }
}

,您的构造函数将变为

public Pets ( String aBreed, String aCoat, String aTemperment )
{
  setBreed(aBreed) ;
  setCoat(aCoat) ;
  setTemperment(aTemperment) ;
}

通过这种方式,您的代码将更加强大,您将看到更少的错误!公平地说,你应该使用Exceptions来告诉这种错误(例如ArgumentNullException),但这是另一个问题。

重要的是要知道默认构造函数经常被用于各种原因。然后,我有习惯尽可能添加默认构造函数。

public Pets()
{
  this("Breedless","Grey","WhateverIsATemperment");
}

度过美好的一天!

答案 1 :(得分:0)

java中的构造函数是一种特殊类型的方法,用于初始化对象。

在创建对象时调用Java构造函数。它构造了值,即为对象提供数据,这就是它被称为构造函数的原因。

在宣布时要遵循一些规则

  1. 构造函数名称必须与其类名称相同
  2. 构造函数必须没有明确的返回类型
  3. 你可以重载它来为你的实例指定不同的初始化

答案 2 :(得分:0)

“我明白通过使用构造函数我们可以保护我们的类与程序的其余部分”是不正确的。无论这意味着什么,构造函数都不存在“屏蔽”任何东西。

构造函数是初始化程序;它们存在以设置对象的初始状态。您可以将数据传递给构造函数,但不要错误地传递操作数据;传递设置初始状态所需的数据。

不要将业务逻辑放在构造函数中。业务逻辑应仅适用于完全构造的对象。在构造函数中进入它是一个奇怪的,昂贵的错误的配方。在涉及线程的情况下,这是非常正确的。构建第一,运营第二。

构造函数不是用于“复制我的类”,而是用于初始化类的实例。

答案 3 :(得分:0)

如前所述,构造函数用于创建类的实例。查看代码,您可以使用方法打印有关宠物的信息,因为所有类都是Object类的子类,您可以使用toString方法打印出类中的信息。你可以做这样的事情来专门为你的宠物类:

@Override
public String toString() {
  return ( "This pet is a " + getBreed() + ", it has a " + getCoat() + " coat and is " + getTemperment() + "." );
}

注意:@Override不需要在那里,但可以是很好的练习。