2010-05-16 2 views
7

어떤 목적으로 제공됩니까?Java에서 선언 할 때 기본적으로 0 만 할당 될 경우 int 변수를 0으로 초기화하는 이유는 무엇입니까?

작성자가 책에서 예제를 읽습니다.

int numOfGuesses=0; 
+0

참조 : http://stackoverflow.com/questions/2843115/to-null-or-not-to-null-my-classs-attributes/ – Arkku

+3

@happysoul : 위대한 답변 외에도, 그것은 당신의 의도를 분명하게합니다. * "numOfGuesses가 초기화되지 않았을 수 있습니다"(* 부분적으로 컴파일 할 수없는 소스/AST에서도) 알림을 실시간으로 얻을 수 있습니다. "*. 나는 지난 25 년 이래로 프로그래밍을 해오 고 있으며 그러한 알림은 ** 엄청난 시간을 절약합니다 **. 'default'값에 의존하는 것이 보통 오류이기 때문에 : 기본값을 사용하려고 했습니까? 아니면 사용하기 전에 할당 할 계획을 세웠습니까 (그리고 잊었습니까?)? – SyntaxT3rr0r

답변

15

0으로 자동 할당은 로컬 변수가 아닌 구성원에만 적용됩니다. 로컬 변수이고 = 0이 생략 된 경우 해당 변수에는 0이 아니라 값이 없습니다. 할당되기 전에 값을 사용하려고하면 컴파일 오류가 발생합니다. 예를 들어,이 코드는 초기화되지 않은 로컬 변수 사용하려고 :

public class Program 
{ 
    public static void main(String[] args) 
    { 
     int numOfGuesses; // local variable 
     System.out.println(numOfGuesses); 
    } 
} 

을이 컴파일 오류 발생 :

public class Program 
{ 
    int numOfGuesses; // member variable 

    public void run() 
    { 
     System.out.println(numOfGuesses); 
    } 

    public static void main(String[] args) 
    { 
     new Program().run(); 
    } 
} 

: 회원 작동 및 출력 제로 사용이 코드 반면

Program.java:6: variable numOfGuesses might not have been initialized 
     System.out.println(numOfGuesses); 

을 멤버는 초기 zalue가 0이라는 사실을 내 코드가 사용하는 경우 무의미한 0으로 지정하는 경향이 있으며 내 코드가 초기 값을 사용하지 않으면 할당을 생략합니다 (예 : 값은 생성자 또는 다른 곳에 할당됩니다.) 그 결과는 어느 쪽이든 마찬가지이므로 스타일 문제 일뿐입니다.

+0

로컬 변수에 기본값이 할당되지 않습니까? int 형 로컬 변수 역시 int 형임을 의미합니다. 나는 혼란 스럽다. 왜 그런가? – Serenity

+0

@happysoul : 맞습니다. 너는 너 자신을 위해 그것을 시도 할 수있다. 곧 코드 예제를 게시 할 것입니다 ... 그냥 지금 입력 ... –

+0

cool..thanks :) 나는 그 이유를 알고 싶습니다. – Serenity

4

더 분명합니다. 어떤 사람들은 좋아해. 이것은 필드에만 적용됩니다. 즉, 지역 변수를 초기화해야합니다. 기본값은 없습니다.

2

Java 컴파일 및 런타임이 다릅니다. 프로그램을 실행하면

, 모든 클래스가 클래스 로더로로드들은 다음과 같습니다

클래스가 처음 사용하는 경우이 작업이 완료

. 실행 순서는 코드의 순서에 따라 정의됩니다.

  • 실행 정적 블록

    static{ 
    //do something here 
    } 
    
  • 정적 변수 0이 제로로 초기화한다

public static int number; 초기화; .Their 주문 실행 오브젝트가 코드 순서에 의해 정의된다 작성할 때


완료의 초기화 다음 기이다.

  • 실행 비 정적 블록

    { 
    // do something here 
    } 
    
  • 비 정적 초기화 (예) 변수

    public int instance_number;


그리고이 때 왜 거기 ~에 기본값이 있음 초기화! 클래스와 비슷한 메커니즘이 없기 때문에 메서드에는 해당되지 않습니다. 기본적으로 이것은 EXPLICITLY 각 메소드 변수를 초기화해야한다는 것을 의미합니다. enter code here

관련 문제