将变量初始化为类或构造函数?

问题描述:

哪个更好或哪个是正确的方式来做到这一点,你也可以给解释(我不知道在Google上使用什么搜索词)。将变量初始化为类或构造函数?

第一种方式:

Public Class A() 
{ 
    Paint _paint _test; 

    public void running() 
    { 
     _test = new Paint(); 
     //use paint 
    } 
} 

OR

Public Class B() 
{ 
    Paint _paint _test = new Paint(); 

    public void running() 
    { 
     //use paint 
    } 
} 

感谢

+1

除了2个都不会编译的事实之外,两者都是有效的,答案取决于上下文以及您试图实现的目标。 – assylias 2012-04-26 20:25:05

+0

[我应该初始化构造函数或外部构造函数中的变量](http://*.com/questions/3918578/should-i-initialize-variable-within-constructor-or-outside-constructor)。 – Lion 2012-04-26 20:29:57

第一种方式是更好,当你可能(也许在未来)可能想传递参数给成员的构造函数,例如:

class Foo{ 
    private Bar bar; 

    public Foo(){ 
     bar = new Bar(); 
    } 

    public Foo(String s){ 
     bar = new Bar(s); 
    } 
} 

第二种方式是更好的,当你知道你将永远都不想参数传递给成员的构造函数,你有多个构造,所有需要初始化这个成员,如:

class Foo { 
    private Bar bar = new Bar(); 

    public Foo(String s){ ... } 
    public Foo(int i){ ... } 
    public Foo(double d){ ... } 
    public Foo(String s, int i){ ... } 
} 

最好是初始化使用之前它。只初始化构造函数中始终需要/使用的变量。

+0

那么?变量的我初始化总是使用,虽然所以类A更好? – 2012-04-26 20:26:55

+0

让我们举一个服务类和dao类的例子。 dao类在服务类中是必需的,并且不依赖于构造函数参数,所以最好将它初始化为classB。如果一个配置参数需要根据构造函数参数进行初始化,那么遵循classB的方法。如果在一个processng中使用了一个ArrayList,最好在该方法内部使用它之前进行初始化。 – 2012-04-26 20:31:53

+0

-1。实例成员总是被使用,否则应该被删除。初始化和构造的全部目的是使对象进入可用状态。您的注释适用于方法中的局部变量,但最好说明为'最好在使用之前声明*'。 – EJP 2012-04-27 00:12:58

答案是“这取决于”。在你已经说明的情况下,使用第二个选项可能更优雅。但是,如果一个值需要知道构造函数参数的值,或者以任何方式修改该类的构造,它可能应该在构造函数中初始化。如果一个成员可以在其声明中初始化,它应该是。这将防止在分配类时需要将它们初始化为0或Null。