【问题标题】:creating and initializing object in java在java中创建和初始化对象
【发布时间】:2014-08-03 13:45:09
【问题描述】:

我的问题非常简单和新手。我有一个类,并想创建它的实例。所以我应该使用临时变量,然后使用 setter 分配值,还是应该创建一个对象,然后直接将用户输入分配给 setter。

class A {
int a;

A(){
    a=0;
}

A(int a){
    this.a=a;
}

}

现在我应该如何创建对象?

  1. 是否应该使用临时变量,然后使用构造函数创建对象。
  2. 我是否应该创建对象并将用户输入直接分配给实例变量。例如
    aObj.setA(getUserInput());

请指教。

【问题讨论】:

  • 一种方式不一定比另一种更好。如果对象提供了一个接受参数的构造函数,通常你应该使用它,因为构造函数可能对传入的对象做更多的事情,而不是简单地设置一个实例变量。

标签: java object


【解决方案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 进行更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2021-06-21
      • 2015-04-21
      • 1970-01-01
      相关资源
      最近更新 更多