2011-10-17 3 views
3

나는 이것을 간단하게하려고 노력할 것이다.클래스 변수에 값 지정하기

class MyClass { 
    private int x = 3; 
} 

class MyClass { 
    private int x; 
    public MyClass() { 
     x = 3; 
    } 
} 

무엇 둘 사이의 차이 그리고 이러한 차이가 플레이에 어떻게 오는가?

미리 감사드립니다.

+3

두 가지 모두 동일합니다 .... –

+0

http://stackoverflow.com/questions/298183/c-sharp-member-variable-initialization-best-practice – PHeiberg

답변

3
class MyClass {  
    private int x = 3; 
} 

은 같은

class MyClass {  
    private int x; 
    MyClass() { // default constructor based on the class access modifier 
    x = 3; 
    } 
} 
+0

에서 자세한 내용을 확인하는 것이 좋습니다. 어떤 이유로 다른 사람보다 사용하기 위해? – Acidic

+0

@Acidic : 전자는 후자보다 간결 해 보이고 간결합니다. –

2

이들은 모두 같은 그러나 여기서 x는 정적 변수가 있다면, 서로 다른 것입니다.

2

전혀 없습니다. 변수는 생성자가 호출 될 때 설정되며, 라인 MyClass temp = new MyClass()을 추가하고 디버거를 사용하여이를 볼 수 있습니다. 그러면 디버거가 먼저 private int x = 3; 행으로 이동합니다.

2

생성자가 호출되기 전에 필드 초기화가 으로 수행됩니다. 하지만 귀하의 예를 들어 그들은 동일합니다

2

예제에서는 실제로 클래스 변수가 아닌 인스턴스 변수가 있습니다. 새로운 생성자 MyClass (Object argument)을 추가하고 x를 직접 설정하는 것을 잊어 버리고 원래의 인수없는 생성자도 잊어 버리면됩니다. 해당되는 경우 최종 결정을 내리면 당연히 어딘가에서 가치를 설정하도록해야합니다.

변수의 경우 더욱 흥미 롭습니다. x를 static으로 변경하고 다음 main 메소드를 MyClass에 추가하고 결과를 관찰하십시오.

public static void main(String ... args) { 
     MyClass y = null; 
     System.out.println(y.x); 
     System.out.println(MyClass.x); 
     new MyClass(); 
     System.out.println(MyClass.x); 
    } 
1

다른 사람들이 언급했듯이 둘 다 같습니다. 가장 큰 차이점은 코드의 가독성, 중복성 및 유지 관리 가능성입니다. 주어진 예제를 두 개 이상의 생성자로 확장하면 차이점에 주목하기 시작할 것입니다. x의 값이 생성자에 의존하지 않는다면 필드 변수를 초기화하고 생성자의 값을 설정하는 것이 좋습니다. 이렇게하면 코드의 가독성과 유지 보수성이 다소 향상되고 중복 된 코드가 제거됩니다 (여러 생성자가 동일한 값으로 변수를 초기화하는 경우).