在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中创建和初始化对象的主要内容,如果未能解决你的问题,请参考以下文章

C# 和 Java 中的垃圾收集

如何在 OpenGL ES 2 中创建和使用 VBO

在 SQL 中创建和更改表值函数时对象类型不兼容

了解在“便签本”中创建和更新的 CoreData 实体

在 Java 中创建和打印格式化文件

java中创建对象了,显示初始化值和构造函数初始化对象的区别?先后执行顺序是啥?