2012-04-26 3 views
1

이 작업을 수행하는 것이 더 낫거나 옳은 방법 일 수 있습니다. 설명을 제공 할 수 있습니까? (Google에서 사용할 검색어가 무엇인지 모릅니다.)변수를 클래스 또는 생성자로 초기화 하시겠습니까?

첫 번째 방법 :

Public Class A() 
{ 
    Paint _paint _test; 

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

또는

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

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

감사

+1

2가 컴파일되지 않는다는 것 외에도 둘 다 유효하며 응답은 컨텍스트와 달성하려는 대상에 따라 다릅니다. – assylias

+0

[생성자 또는 외부 생성자 내에서 변수를 초기화해야합니까?] (http://stackoverflow.com/questions/3918578/should-i-initialize-variable-within-constructor-or-outside-constructor). – Lion

답변

4

첫 번째 방법은 (어쩌면 미래에) 아마도 예를 들어, 회원의 생성자에 매개 변수를 전달하려고 할 수있는 경우에 더 낫다 회원의 생성자에 매개 변수를 전달하고 예를 들어, 모두가이 멤버를 초기화해야하는 여러 생성자가 있습니다

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){ ... } 
} 
-1

그것은이 사용되기 직전에 초기화하는 것이 가장 좋습니다. 생성자에서 항상 필요하거나 사용되는 변수 만 초기화하십시오. 당신은 당신이 원하는하지 않습니다 알고

class Foo{ 
    private Bar bar; 

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

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

두 번째 방법이 더 낫다 :

+0

그래서? 변수의 초기화는 항상 사용되지만 클래스 A가 더 좋습니까? –

+0

서비스 클래스 및 DAO 클래스의 예를 들어 볼 수 있습니다. dao 클래스는 서비스 클래스에서 필요하며 생성자 인수에 의존하지 않으므로 classB와 같이 초기화하는 것이 좋습니다. 구성 매개 변수가 생성자 인수를 기반으로 초기화되어야하는 경우 클래스 B의 접근 방식을 따르십시오. 처리 중 하나에서 ArrayList가 사용되는 경우 메서드 내에서 사용하기 전에 초기화하는 것이 좋습니다. –

+0

-1. 인스턴스 멤버는 항상 사용되며 그렇지 않으면 제거해야합니다. 초기화 및 구성의 목적은 객체를 사용 가능한 상태로 만드는 것입니다. 당신의 발언은 메소드의 지역 변수에 적용되지만 '사용되기 직전에 선언하는 것이 가장 좋습니다'라고 말하는 것이 더 낫습니다. – EJP

0

대답은 '을이 달려있다'. 그림의 경우 두 번째 옵션을 사용하는 것이 더 유익 할 것입니다. 그러나 값이 생성자 매개 변수의 값을 알아야하거나 클래스의 구성에 의해 변경된 경우에는 생성자에서 초기화해야합니다. 멤버가 선언시 초기화 될 수 있으면 그렇게해야합니다. 이렇게하면 클래스를 할당 할 때 0 또는 Null로 초기화하지 않아도됩니다.

관련 문제