2012-07-12 4 views
0

정적 변수 : 클래스 변수는 클래스의 각 객체마다 별도로 생성되지 않습니다.
인스턴스 변수 : 클래스 변수이기도하지만 각 개체에 대해 개별적으로 만들어집니다.
위의 정의는 참조 용입니다.정적 선언과 비 정적 선언의 차이점

왜 내가이 클래스 declaration.I에서 오류가 발생하는지 설명해주십시오. 왜냐하면 내가 초기화 한 x를 가지고 있지 않기 때문입니다.

class non_static{ 
public static void main(String args[]) 
{ 
int x; 
System.out.println(x); 

} 
} 

하지만이 클래스 선언은 완전히 좋습니다. 이 프로그램의

class static_example{ 
static int x; 
public static void main(String args[]) 
{ 
System.out.println(x); 
} 

} 

그리고 출력은 지역 변수가없는 동안 정적 멤버가 기본 값으로 초기화됩니다 이유를 설명해 마십시오 0

입니다.

+0

오,하지만 인스턴스 변수는 있습니다. * 로컬 변수는 그렇지 않습니다. - 정의가 어디에 있는지보세요. ​​ – Voo

답변

2

Java가 이와 같이 지정하는 이유를 알고 싶다면 정적 코드 분석의 한계가 있습니다. 스택에서 할당 된 메모리 (및 로컬 변수가있는 곳)는 사용하기 전에 초기화 될 컴파일러에 의해 긍정적으로 확인 될 수 있습니다. 힙 할당 스토리지 (정적 vars, 인스턴스 vars)에서는 그렇지 않습니다. 이것 때문에, JLS에서는, 포인터를 공개하기 전에, heap storage가 항상 0이되도록 (듯이) 구현하고 있습니다.

+0

고맙습니다. 알았다 :) – cdev

5

정적 선언 대 인스턴스 선언과는 아무런 관련이 없습니다. 로컬 선언은 기본값이 없으므로 초기화되지 않은 경우 오류가 발생합니다.

public class Example { 
    private static int stattic; 
    private int instancee; 

    public void someMethod() { 
     System.out.println("I am static and 0: " + stattic); 
     System.out.println("I am not static and 0: " + instancee); 

     int locall; 

     System.out.println("I am causing an error because I have not been initialized: " + locall); 
    } 
} 
1

로컬 변수는 항상 값으로 초기화해야합니다. 지역 변수가 아닌 (즉, 인스턴스 또는 정적 변수) 기본값은 해당 유형의 널 값 (null, 0 또는 false)으로 정의됩니다.

0

자바에서 인스턴스 변수 (즉, 클래스 변수)를 기본값으로 초기화 있습니다. 그러나 는 초기화하지 않고 사용할 수 없습니다 지역 변수 (즉, 방법 변수) ... 당신의 위의 예에서

class static_example{ 
static int x; 
public static void main(String args[]) 
{ 
System.out.println(x); 
} 

} 

, 배는 클래스 범위에서 선언 ... 그래서입니다 이미 기본값 0으로 초기화되었으므로 오류가 발생하지 않습니다.

관련 문제