자바 동적: 클래스 로 딩 지연 초기 화
29160 단어 자바
SEP 8TH, 2013 | COMMENTS
에서 언급 한 바 와 같이 링크 의 마지막 단 계 는 기호 인용 에 대한 해석 이다.그러나 이것 은 필수 적 인 것 이 아니 라 해당 기호 가 처음 사 용 될 때 까지 기 다 렸 다가 해석 할 수 있다.
한편, 클래스 의 초기 화 는 링크 뒤에 있 습 니 다. (주의 하 세 요. JVM 에 따라 서로 다른 실현 방식 이 있 습 니 다. 클래스 가 초기 화 될 때 모든 기호 참조 에 대한 해석 을 완 성 했 을 수도 있 고 없 을 수도 있 습 니 다) 본 고 는 클래스 의 초기 화 시기 문제 입 니 다.
자바 류 의 동적 로드 메커니즘 은 클래스 가 주동 적 으로 사용 되 기 전에 클래스 초기 화 를 완료 해 야 합 니 다.주동 적 으로 호출 된 이상 수 동적 으로 호출 되 었 다.이 두 가 지 는 어떤 차이 가 있 습 니까?
다음은 두 가 지 를 구분 하기 위해 주동 적 으로 사용 하 는 모든 상황 을 보 여 줍 니 다.
1. 이러한 종류의 새로운 인 스 턴 스 를 만 듭 니 다 2. 이 클래스 의 정적 방법 을 호출 합 니 다 3. 클래스 나 인터페이스 에 있 는 비상 양의 정적 변 수 를 가 져 옵 니 다 4. 반사 호출 방법 이용 5. 이 클래스 의 하위 클래스 초기 화 6. JVM 이 실 행 될 때 초기 화해 야 하 는 클래스 로 제 정 됨 3 중 왜 '비상 양의 정적 변수' 인지 주의 하 세 요.상수, 즉 final 이 라 고 밝 히 면 클래스 에 대한 구조 가 나타 나 지 않 습 니 다. 호출 할 때 클래스 이름 이 나타 나 지만 실제 호출 은 상수 를 직접 사용 하여 클래스 의 제한 을 우회 합 니 다 (상세 한 내용 은 상수 탱크 와 운행 시 상수 탱크 의 지식 참조).
클래스 나 인터페이스 에 표 시 된 비상 정적 변수 만 이 호출 할 수 있 습 니 다.부모 클래스 의 비상 정적 변 수 를 수 동적 으로 사용 합 니 다 (positive use).
다음 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Parent {
static int i = 10 ;
static{
System.out.println("Parent initiate");
}
public static void func(){
System.out.println("func");
}
}
public class Son extends Parent{
static{
System.out.println("Son initiate");
}
}
public class Test {
static{
System.out.println("Test initiate");
}
public static void main(String[] args){
System.out.println(Son.i);
Son.func();
}
}
실행 결 과 는:
1
2
3
4
Test initiate
Parent initiate
10
func
Son 이 나 타 났 지만 Son. i 는 부모 류 의 비상 정적 변 수 를 방문 합 니 다.그래서 Son 클래스 를 초기 화하 지 않 고 정적 변 수 를 명확 하 게 설명 하 는 Parent 클래스 만 초기 화 했 습 니 다.
이 를 통 해 알 수 있 듯 이 일반적인 클래스 에서 우 리 는 다른 종류의 구성원 변 수 를 정의 합 니 다. 이 변 수 는 new 가 새로운 대상 을 만 들 지 않 으 면 JVM 도 이 종 류 를 초기 화 하지 않 습 니 다. 클래스 는 이 때 불 러 온 것 일 뿐 링크 와 초기 화 되 지 않 습 니 다.
원본 주소:http://biaobiaoqi.github.com/blog/2013/09/08/late-initialising-in-java/ 저작권 성명: 자유 전재 - 비상 용 - 비 파생 - 서명 유지 | Creative Commons BY-NC-ND 3.0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.