在java中创建和初始化对象
Posted
技术标签:
【中文标题】在java中创建和初始化对象【英文标题】:creating and initializing object in java 【发布时间】:2014-08-03 13:45:09 【问题描述】:我的问题非常简单和新手。我有一个类,并想创建它的实例。所以我应该使用临时变量,然后使用 setter 分配值,还是应该创建一个对象,然后直接将用户输入分配给 setter。
class A
int a;
A()
a=0;
A(int a)
this.a=a;
现在我应该如何创建对象?
-
是否应该使用临时变量,然后使用构造函数创建对象。
我是否应该创建对象并将用户输入直接分配给实例变量。例如
aObj.setA(getUserInput());
请指教。
【问题讨论】:
一种方式不一定比另一种更好。如果对象提供了一个接受参数的构造函数,通常你应该使用它,因为构造函数可能对传入的对象做更多的事情,而不是简单地设置一个实例变量。 【参考方案1】:第一个问题: 任何一个。取决于很多事情,例如:
您是否已经知道初始值或默认值应该是什么? 是? 如果不将其设置为任何 第一? 内部变量是否应该有一个setter?例子:如果我有
class bonkinator
int timesBonked;
bonk()
timesBonked++;
getBonks()
return timesBonked; // thanks for the correction, Unihedron
...
那么我很可能不希望其他代码干预 timesBonked,所以我不会给它一个 setter。因此,我想在构造函数中将 timesBonked 设置为某个初始值,而该值是我选择的还是调用代码选择的取决于我们要执行的操作。
到第二个问题:再次依赖。
您打算重新使用 getUserInput() 中的那个东西吗? 调用 getUserInput() 是否会惹恼用户或重新运行缓慢的代码(例如,尝试从未更改的数据库中读取某些内容)而没有额外的好处?【讨论】:
谢谢!我得到了我想要的。【参考方案2】:在同一个包中调用new A();
或new A(42);
。
请看以下内容:
A a = new A(getUserInput());
A a = new A();
a.a = getUserInput();
没有太大区别,但根据代码风格选择您的偏好:Java 编译器会优化大部分代码。
【讨论】:
【参考方案3】:这完全取决于设计,但通常在生产代码中首选第二种方式,因为您稍后可能会在类中添加新变量,然后如果您更改构造函数,您可能会破坏现有代码。
还有
A()
a=0;
没有必要,因为实例变量使用默认值初始化,即 int 为 0。
【讨论】:
【参考方案4】:没有具体的方法可以做到这一点。它完全基于你想做的事情。您可以在初始化实例后使用 setter 来设置值。或者您可以有一个参数构造函数并在初始化点传递值。或者,如果你想在初始化时甚至可以有固定值。完全由您决定哪种方法最适合您尝试做的事情。
【讨论】:
@Unihedron 我的意思是 id 初始化值始终是某个固定值,那么拥有这样的方式不是问题。您可以稍后使用 setter 进行更改。以上是关于在java中创建和初始化对象的主要内容,如果未能解决你的问题,请参考以下文章