Java 정적 변수 메소드 참조 에서 :
- 객체 (인스턴스)가 아닌 클래스에 속하는 변수입니다.
- 정적 변수는 실행 시작시 한 번만 초기화됩니다. 이러한 변수는 인스턴스 변수를 초기화하기 전에 먼저 초기화됩니다.
- 클래스의 모든 인스턴스에서 공유 할 단일 복사본
- 정적 변수는 클래스 이름으로 직접 액세스 할 수 있으며 개체가 필요하지 않습니다.
인스턴스 및 클래스 (정적) 변수는 의도적으로 초기화하지 못하면 자동으로 표준 기본값으로 초기화됩니다. 지역 변수가 자동으로 초기화되지는 않지만 사용하기 전에 지역 변수를 초기화하거나 해당 지역 변수에 값을 할당하지 못하는 프로그램을 컴파일 할 수 없습니다.
컴파일러가 실제로하는 일은 모든 정적 변수 이니셜 라이저와 모든 정적 이니셜 라이저 코드 블록을 클래스 선언에 나타나는 순서대로 결합하는 단일 클래스 초기화 루틴을 내부적으로 생성하는 것입니다. 이 단일 초기화 절차는 클래스가 처음로드 될 때 한 번만 자동으로 실행됩니다.
내부 클래스의 경우 정적 필드를 가질 수 없습니다.
내부 클래스는 명시 적 또는 암시 적으로 선언되지 않은 중첩 된 클래스입니다 static
.
...
내부 클래스는 정적 이니셜 라이저 (§8.7) 또는 멤버 인터페이스를 선언 할 수 없습니다.
내부 클래스는 상수 변수가 아닌 경우 정적 멤버를 선언 할 수 없습니다.
JLS 8.1.3 내부 클래스 및 엔 클로징 인스턴스 참조
final
Java의 필드는 선언 위치와 별도로 초기화 할 수 있지만 필드에는 적용 할 수 없습니다 static final
. 아래 예를 참조하십시오.
final class Demo
{
private final int x;
private static final int z;
static
{
z = 10;
}
public Demo(int x)
{
this.x=x;
}
}
하나 개가 있기 때문이다 사본 의 static
대신 인스턴스 변수와 우리가 초기화하려고하면 같은 유형의 각 인스턴스와 관련된보다, 유형과 관련된 변수 z
유형 static final
, 그것은 다시 초기화하려고 시도 생성자 내에서 static final
유형 필드를 z
생성자는 정적 final
필드에 발생하지 않아야하는 클래스의 각 인스턴스화에서 실행되기 때문 입니다.