使用类级别字段或方法变量?

时间:2014-02-24 09:37:43

标签: java oop class-design

我有一个对象,我在一个方法中初始化:

public void something()
{
    Dummy obj = Factory.getDummy();
    method2(obj);
}

现在,这个Dummy对象将被许多方法使用

public void method2(Dummy obj)
{
    method2(obj);
    ....
}

现在,我怀疑这种情况必须如何处理,就像我这样做。或者,在obj的{​​1}级字段中填写something并在something中初始化。

像:

private Dummy obj;

public void something()
{
    obj = Factory.getDummy();
    method2(obj);
}

并在后续方法中使用。 (从方法中删除参数)。

那么,处理这种情况的最佳方法是什么?为什么?

4 个答案:

答案 0 :(得分:7)

  1. 如果它与班级密切相关,请将其设为静态。
  2. 如果它与实例密切相关,请将其设为非静态成员。
  3. 如果它与方法调用或当前线程密切相关,或者您无法决定(1)或(2),请将其设置为方法本地。

答案 1 :(得分:2)

您应该将obj声明为class-level字段,然后在构造函数中对其进行实例化。

但更多要点清楚:

  • 如果something()和期望method2()对象的Dummy等方法位于同一个类中,那么您甚至不需要传递该对象。在这种情况下,上述声明得到支持
  • 如果不位于同一个类中,则通过根据实例或类调用方法来传递对象。

答案 2 :(得分:2)

通常,您应最小化一个变量的范围。但是,如果变量在class中非常常用,则应将其声明为 class-level ,作为实例变量。

答案 3 :(得分:1)

如果某个property与类关联,那么该属性应该是静态的。也就是说,如果某个类的所有实例中的某些属性相同,那么property应该是类中的静态。

如果每个类的实例有一些property不同,那么property应该是该类的成员变量(非静态变量)。

如果某些属性需要临时执行某些操作,那么将该属性作为操作的局部变量(method)。