没有构造函数的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的程序员实现)。
如果仅实现类来存储记录,则可以将字段设置为private
和final
并实现适当的getter。
您根本没有定义构造函数,因此将为您添加默认构造函数。 但是,它不会设置任何这些字段,所以你必须去:
Customer c = new Customer(); c.ID = 34
等等。 有几件事:
- 您没有声明访问修饰符,因此同一个包中的类将能够调用
c.ID
但其他类则不会。 您可能希望将它们公开 - 但是,如果您创建了一个getter和setter方法而不是访问您的字段,那可能会更好。 这样,您可以在不更改界面的情况下更改将来的字段
您建议的方法不能很好地抽象和分离变量。 它允许任意代码随意乱搞它们。
Java的一部分是OOP或面向对象编程。 如果您将该类的某些部分设置为private
并与其余代码分开,那么它将限制从其他代码访问,这有助于您的类遵循封装的OO原则。
相反,我会在适当的时候创建一个填充字段的构造函数,例如arrive
和id
。 我会把变量private
。 另外,我会将id
设为静态成员,因为它会针对每个新客户递增。
是的,您需要一个构造函数在对象创建期间为您的类分配参数,或者您可以通过实例单独引用每个变量并分配它,例如:
Customer c = new Customer(); c.id = 0; // etc
构造函数使这更容易,因为您不需要编写超过必要的代码。
我建议使用构造函数将各种值分配给类实例,而不是每次创建对象的实例时手动执行它。