문제

정적 변수에서 최종 변수에 액세스 할 수없는 이유는 무엇입니까? 컴파일 시간에 그들은 단순히 값으로 직접 대체하여 정적 방법으로도 사용할 수 있어야합니다.

이 제한은 왜 ???

도움이 되었습니까?

해결책

전부는 아닙니다 final 변수는 컴파일 시간 상수입니다. 뿐 static final 변수는 컴파일러로 컴파일 타임 상수로 대체 할 수 있습니다. final 특정 경우 수정자는 보장하는 데만 사용됩니다 const-correctness.

그리고 static 이러한 변수는 동일한 클래스의 다른 인스턴스에 대해 다른 값을 가질 수 있으므로 메소드는 비 정적 변수에 액세스 할 수 없습니다.

다른 팁

정적 = 클래스에서.

final = 값을 변경하지는 않지만 (정적이 아닌 경우 각 인스턴스의 경우).

examply로 당신은 할 수 있습니다 :

public class Weird
{
private static long number = System.getTimeInMilis();
private final long created = System.getTimeInMilis();
}

이상한 객체를 만들 때마다 생성 된 값이 다른 값을 포함합니다.

그러나 이상한 것의 가치는 클래스가로드 된 시간입니다.

왜 a static 메소드는 액세스 할 수 없습니다 final 인스턴스 변수 (최종 멤버 변수가 항상 코드에서 문자 그대로 또는 상수 값으로 설정되어 있음을 가정 함) (클래스의 다른 인스턴스가 동일한 값에 대해 다른 값을 가질 수 있기 때문에. final 인스턴스 변수 (예 : 생성자를 통해 설정할 수 있음). ㅏ static 메소드는 클래스의 특정 인스턴스에 대한 지식이 없으며 액세스 할 수 있습니다. static final 변수.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top