자바 류 초기 화 순서 지식 포인트 요약
순서 그림 초기 화:
우리 도 아래 의 테스트 코드 를 통 해 이 점 을 검증 할 수 있다.
package com.trs.oop;
/**
*
* -> -> -> ->
* @author xiayunan
* @date 2018 7 5
*
*/
public class InitialOrderTest {
//
public static String staticField = " ";
//
public String field = " ";
//
static {
System.out.println(staticField);
System.out.println(" ");
}
//
{
System.out.println(field);
System.out.println(" ");
}
//
public InitialOrderTest() {
System.out.println(" ");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}
실행 결과:상속 에 대한 초기 화 순 서 는 어떻게 될 까?다음 예제 코드 를 보십시오.
package com.trs.oop;
/**
*
* @author xiayunan
* @date 2018 7 5
*
*/
class Parent {
//
public static String p_StaticField = " -- ";
protected int i = 1;
protected int j = 8;
//
public String p_Field = " -- ";
//
static {
System.out.println(p_StaticField);
System.out.println(" -- ");
}
//
{
System.out.println(p_Field);
System.out.println(" -- ");
}
//
public Parent() {
System.out.println(" -- ");
System.out.println("i=" + i + ", j=" + j);
j = 9;
}
}
public class SubClass extends Parent {
//
public static String s_StaticField = " -- ";
//
public String s_Field = " -- ";
//
static {
System.out.println(s_StaticField);
System.out.println(" -- ");
}
//
{
System.out.println(s_Field);
System.out.println(" -- ");
}
//
public SubClass() {
System.out.println(" -- ");
System.out.println("i=" + i + ",j=" + j);
}
//
public static void main(String[] args) {
new SubClass();
}
}
실행 결과:이제 결 과 는 자명 하 다.하위 클래스 의 정적 변수 와 정적 초기 화 블록 의 초기 화 는 부모 클래스 의 변수,초기 화 블록 과 구조 기 가 초기 화 되 기 전에 완 료 됩 니 다.
정적 변수,정적 초기 화 블록,변수,초기 화 블록 초기 화 순 서 는 클래스 에 나타 난 우선 순위 에 달 려 있 습 니 다.
실행 프로 세 스 분석
(1)SubClass.main()에 접근 하면(이것 은 static 방법 입 니 다)로 더 는 컴 파일 된 SubClass 류 의 코드(즉,SubClass.class 파일)를 찾 습 니 다.불 러 오 는 과정 에서 로 더 는 기본 클래스(즉 extends 가 표시 할 뜻)가 있다 는 것 을 알 고 기본 클래스 를 다시 불 러 옵 니 다.네가 기본 적 인 대상 을 만 들 든 말 든 이 과정 은 항상 발생 할 것 이다.기본 클래스 에 기본 클래스 가 있다 면 두 번 째 기본 클래스 도 불 러 옵 니 다.
(2)루트 클래스 의 static 초기 화 를 실행 하고 다음 파생 클래스 의 static 초기 화 를 수행 합 니 다.이 순 서 는 파생 류 의'static 초기 화'가 기본 멤버 의 정확 한 초기 화 에 의존 할 수 있 기 때문에 매우 중요 하 다.
(3)모든 필요 한 클래스 가 마 운 트 되 었 을 때 main()방법 체 를 실행 하고 new SubClass()로 대상 을 만 듭 니 다.
(4)클래스 SubClass 에 부모 클래스 가 존재 하면 부모 클래스 의 구조 함 수 를 호출 합 니 다.슈퍼 를 사용 하여 어떤 구조 함수(즉,Beetle()구조 함수 가 하 는 첫 번 째 일)를 호출 할 지 지정 할 수 있 습 니 다.
기류 의 구조 과정 과 구조 순 서 는 파생 류 와 같다.먼저 기본 클래스 의 각 변 수 는 글자 순서에 따라 초기 화 한 다음 에 기본 클래스 의 구조 함수 의 나머지 부분 을 실행 합 니 다.
(5)하위 클래스 구성원 데 이 터 를 성명 의 순서에 따라 초기 화하 고 하위 클래스 구조 함수 의 나머지 부분 을 실행 합 니 다.
이상 은 이번 우리 가 소개 한 모든 관련 지식 입 니 다.여러분 의 학습 과 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 에서 클래스 의 실례 화 방법자바 에서 클래스 의 실례 화 방법 은 네 가지 경로 가 있다. 1) new 연산 자 사용 2) Class 대상 을 호출 하 는 new Instance () 방법 3) 클론 () 방법 을 호출 하여 기 존 인 스 턴...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.