没有构造函数的Java类?

我有这门课

class Customer{ int ID; Time arriveTime; Time serviceTime; Time completeTime; int transaction; } 

我不需要构造函数来设置值吗? 在创建一组Customers时,我将使用此类来保存不同的值。 这不意味着我需要这个来设置值吗?

 public Customer(int id, Time arrive, Time service, Time complete, int trans){ ID = id; arriveTime = arrive; serviceTime = service; completeTime = complete; transaction = trans; } 

我只需要Customer类来保存每个客户的信息。

不一定,默认情况下,没有可见性修饰符的属性(值)可以直接在同一包中的代码的Customer实例上设置。

例如:

 Customer c = new Customer(); // default constructor c.ID = 5; ... (etc.) 

更多关于修饰符访问级别的信息 。

可以从类外部设置字段,这意味着您可以使用另一个类来设置值。

然而,构造函数确实是一种更方便的方法,可以屏蔽另一个类对字段的操作(由一些可能会干扰预期function的程序员实现)。

如果仅实现类来存储记录,则可以将字段设置为privatefinal并实现适当的getter。

您根本没有定义构造函数,因此将为您添加默认构造函数。 但是,它不会设置任何这些字段,所以你必须去:

 Customer c = new Customer(); c.ID = 34 

等等。 有几件事:

  • 您没有声明访问修饰符,因此同一个包中的类将能够调用c.ID但其他类则不会。 您可能希望将它们公开
  • 但是,如果您创建了一个getter和setter方法而不是访问您的字段,那可能会更好。 这样,您可以在不更改界面的情况下更改将来的字段

您建议的方法不能很好地抽象和分离变量。 它允许任意代码随意乱搞它们。

Java的一部分是OOP或面向对象编程。 如果您将该类的某些部分设置为private并与其余代码分开,那么它将限制从其他代码访问,这有助于您的类遵循封装的OO原则。

相反,我会在适当的时候创建一个填充字段的构造函数,例如arriveid 。 我会把变量private 。 另外,我会将id设为静态成员,因为它会针对每个新客户递增。

是的,您需要一个构造函数在对象创建期间为您的类分配参数,或者您可以通过实例单独引用每个变量并分配它,例如:

  Customer c = new Customer(); c.id = 0; // etc 

构造函数使这更容易,因为您不需要编写超过必要的代码。

我建议使用构造函数将各种值分配给类实例,而不是每次创建对象的实例时手动执行它。