일반적으로 static
" 유형 의 인스턴스 가 아닌 유형 자체 와 관련됨"을 의미 합니다.
즉, 유형의 인스턴스를 만들지 않고도 정적 변수를 참조 할 수 있으며 변수를 참조하는 코드는 정확히 동일한 데이터를 참조합니다. 이것을 인스턴스 변수와 비교하십시오.이 경우 클래스의 인스턴스마다 하나의 독립 버전의 변수가 있습니다. 예를 들어 :
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
10 밖으로 인쇄 : y.instanceVariable
와는 x.instanceVariable
별개로 인해 x
및 y
다른 개체를 참조하십시오.
당신은 할 수 는 그렇게 나쁜 생각하지만, 참고 문헌을 통해 정적 멤버를 참조하십시오. 우리가 한 경우 :
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
그러면 20이 출력됩니다-인스턴스 당 하나가 아닌 하나의 변수 만 있습니다. 이것을 다음과 같이 작성하는 것이 더 명확했을 것입니다.
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
그것은 행동을 훨씬 더 분명하게 만듭니다. 최신 IDE는 일반적으로 두 번째 목록을 세 번째 목록으로 변경하도록 제안합니다.
각 인스턴스마다 고유 NUMBER
하지만 항상 동일한 값 을 갖기 때문에 다음과 같이 값을 초기화하는 인라인 선언을 가질 이유가 없습니다 (불변이고 리터럴로 초기화 됨). 이것은 final static
모든 인스턴스에 대해 하나의 변수 만 갖는 것과 같습니다 .
private final int NUMBER = 10;
따라서 변경할 수없는 경우 인스턴스 당 하나의 사본이있는 지점이 없습니다.
그러나 다음과 같이 생성자에서 초기화되면 의미가 있습니다.
// No initialization when is declared
private final int number;
public MyClass(int n) {
// The variable can be assigned in the constructor, but then
// not modified later.
number = n;
}
이제의 각 인스턴스에 대해 MyClass
다르지만 변경할 수없는 값을 가질 수 있습니다 number
.