2012-01-01 1 views
4

나는 예를 들어 정적 또는 상수 멤버 정의 할 때 :
public static final Font BIG_FONT = new Font("", Font.BOLD, 18);
내가 먼저를 사용할 때 그들은 단지 런타임 동안 정지에서 하나의 결과 또는 강제하는로드 것으로 나타났습니다 나를 어떻게 든 프리로드에 프로그램 시작시에 상수를 강제로 '사용'합니다.상수로드

첫 번째 사용시로드되기를 기다리지 않고 프로그램 시작시로드 될 예정인 정적 멤버가 아닌가요? 미리로드되었는지 어떻게 확인할 수 있습니까?

미리 감사드립니다.

답변

2

Java에서 통계는 정적 멤버 자체를 처음 사용할 때가 아니라 클래스를 처음 사용할 때 초기화됩니다. 해당 클래스의 다른 멤버를 사용하여 강제로드 할 수 있습니다. 정적 필드 자체 일 필요는 없습니다.

2

No.

정적 초기화 프로그램은 클래스를 처음로드 할 때 실행됩니다.

Java Runtime은 프로그램을 시작하자마자 모든 클래스를 초기화하는 데 방해가되지 않습니다. 그것은 아주 나쁜 생각 일 것입니다.

+0

어떻게이 문제를 피할 수 있습니까? – Acidic

+0

AFAIK 할 수 없습니다. 코드에 클래스를 명시 적으로로드해야합니다. – SLaks

+0

그러나 정적 멤버가 포함 된 클래스 중 일부는 프로그램이 이미 실행 중일 때만 사용할 수있는 특정 정보가 없으면 인스턴스화 할 수 없습니다. – Acidic

2

정적 로더 메소드를 생성하고 초기화 메소드 중에 포함시킬 수 있습니다.

1

다른 것들도 언급했듯이 통계는 클래스가 처음로드 될 때 초기화됩니다.

강제로 한 가지 방법은 해당 클래스의 인스턴스를 만들거나 정적을 포함하는 고유 한 (새) 클래스를 만들고 프로그램을 시작하자마자 인스턴스화하는 것입니다. 그러나 다른 곳에서 더 잘 사용될 수있는 메모리를 묶어 두 연습 중 하나를 권하고 싶지는 않습니다.