자바 류 의 초기 화 실행 순서 (계승, static 변수 및 코드 블록, 일반 구성원 변수, 구조 방법 포함)
3056 단어 자바 기반대상 초기 화 순서
public class TestCodeExecOrder extends TestCodeExecOrderHost {
static {System.out.println("TestCodeExecOrder static ");}//(3)
//(1) (2) , ,
private int x = print("TestCodeExecOrderHost xx ");//(2)
{System.out.println(xx2+"TestCodeExecOrderHost ");}//(1)
//private int x = print("TestCodeExecOrderHost xx ");//(2)
//(3) (4) , ,
private static int xx2 = print("static TestCodeExecOrder.xx2 init");//(4)static
public TestCodeExecOrder(){
System.out.println("TestCodeExecOrder j="+j);
System.out.println("TestCodeExecOrder x="+x);
}
public static void main(String[] args) {
System.out.println("TestCodeExecOrder main");
TestCodeExecOrder t = new TestCodeExecOrder();
}
}
class TestCodeExecOrderHost{
private int i = 9;
public int j;
private static int xx = print("static TestCodeExecOrderHost.xx init");
{System.out.println(xx+"TestCodeExecOrderHost ");}
static {System.out.println("TestCodeExecOrderHost static ");}
public TestCodeExecOrderHost(){
System.out.println("TestCodeExecOrderHost i="+i+" j="+j);
j = 10;
}
public static int print(String s){
System.out.println(s);
return 20;
}
}
//output
static TestCodeExecOrderHost.xx init
TestCodeExecOrderHost static
TestCodeExecOrder static
static TestCodeExecOrder.xx2 init
TestCodeExecOrder main
20TestCodeExecOrderHost
TestCodeExecOrderHost i=9 j=0
TestCodeExecOrderHost xx
20TestCodeExecOrderHost
TestCodeExecOrder j=10
TestCodeExecOrder x=20
요약:
주선: 부류 가 있 으 면 부류 부분 을 먼저 가 고 부류 부분 을 먼저 가 십시오.
세분 화:
(0) 다른 모든 일이 발생 하기 전에 대상 에 게 분 배 된 저장 공간 을 바 이 너 리 0 으로 초기 화 합 니 다 (먼저 부모 클래스 의 구성원 변 수 는 기본 값 이 고 하위 클래스 의 구성원 변 수 는 기본 값 입 니 다)
(1) 프로그램 이 실 행 될 때 첫 번 째 일 은 TestCodeExecOrder. main 방법 (static) 에 접근 하려 는 것 입 니 다. 이것 은 TestCodeExecOrder 를 불 러 오 는 컴 파일 코드 입 니 다. 그 를 불 러 오 는 과정 에서 부모 클래스 TestCodeExecOrder Host 가 있 는 것 을 발견 하면 부모 클래스 를 불 러 옵 니 다.
(2) 이 어 부모 클래스 의 static 초기 화 는 즉시 진 행 됩 니 다. 그 다음 에 하위 클래스 의 static 초기 화 (이곳 의 static 은 static 변수 와 static 코드 블록 을 포함 합 니 다. 앞 에 있 는 사람 이 먼저 실행 합 니 다). 이 때 필요 한 클래스 로드 가 끝나 면 대상 을 만 들 수 있 습 니 다.
(3) 이때 대상 의 일반 구성원 변 수 를 초기 화 (할당 할 가치 가 있 고 값 이 없 는 기본 값) (일반 구성원 변 수 는 일반 구성원 변수 와 동적 코드 블록 을 포함 하고 누가 앞 에 있 으 면 먼저 실행) 한 다음 에 부모 류 의 구조 방법 이 실 행 된 다음 에 하위 클래스 의 구조 방법 이다.
본인 이 책 을 읽 은 후의 이해, 잘못된 부분 이 있 으 면 여러분 의 지적 을 환영 합 니 다. 이러한 기본 적 인 집행 순 서 는 실제 프로젝트 의 bug 를 분석 하 는 데 매우 유용 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
범용 용법 예시앞으로 51CTO 에 정착 해 기술 개발 에 전념 할 테 니 잘 부탁드립니다.다음 코드 는 자신 이 (저자: 이 흥 화) 를 공부 할 때 두 드 린 코드 로 주석 이 완비 되 어 있다. 범용 클래스 Point. ja...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.