자바 클래스 로드 연결 및 초기 화 원리 분석

1.프로그램 이 특정한 유형 을 사용 할 때 JVM 은 다음 과 같은 세 가지 절 차 를 완성 합 니 다.

2.연결
1)검증
합 법 적 인 바이트 파일 인지 확인 합 니 다.JDK 버 전이 정확 한 지 등 을 검증 합 니 다.
2)준비
구성원 변수(클래스 변수/정적 변수)에 기본 값 을 부여 합 니 다.
상수(final)등 치 를 방법 구역 의 상수 탱크 에 준비 하 세 요.
3)해석
가상 컴퓨터 상수 탱크 의 기호 참조(상수 명)를 참조(주소)로 바 꾸 는 과정
3.클래스 초기 화
클래스 초기 화 는 두 부분 으로 구성 되 어 있 습 니 다.
(1)정적 변수의 디 스 플레이 초기 화 코드,할당 코드
(2)정적 코드 블록
(1)과(2)의 순서 가 위 에서 아래로
  
클래스 가 초기 화 되 었 을 때,그의 부모 클래스 가 초기 화 되 지 않 은 것 을 발견 하면,먼저 부모 클래스 를 초기 화 합 니 다.
모든 종 류 는 한 번 만 초기 화 되 고 초기 화 과정 에서 스 레 드 가 안전 합 니 다.
어떤 조작 이 클래스 의 초기 화 를 가 져 올 수 있 습 니까?이 말 은 클래스 의 로드 가 반드시 클래스 초기 화 되 는 것 은 아니 라 는 뜻 이다.
-다음 작업 은 클래스 초기 화 발생:
1)main 방법 이 있 는 클래스 로 딩 시
2)new 클래스 의 대상 일 때
3)이러한 정적 변수(final 상수 제외)와 정적 방법 을 호출 할 때
4)자바.lang.reflect 패 키 지 를 사용 하여 클래스 를 반사 호출 할 때
5)클래스 를 초기 화 할 때 부모 클래스 가 초기 화 되 지 않 으 면 부모 클래스 를 초기 화 합 니 다.
-다음 동작 은 클래스 초기 화가 일어나 지 않 습 니 다.
1)정적 상수 인용 은 이러한 초기 화 를 촉발 하지 않 습 니 다(상수 가 연결 단계 에서 방법 구역 의 상수 탱크 에 저 장 됩 니 다)
2)정적 도 메 인 에 접근 할 때 이 도 메 인 을 진정 으로 설명 하 는 클래스 만 초기 화 됩 니 다.
하위 클래스 를 통 해 부모 클래스 의 정적 변 수 를 참조 하면 하위 클래스 가 초기 화 되 지 않 습 니 다.
  
3)배열 정의 클래스 참조 로 이러한 초기 화 를 실행 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기