자바 류 초기 화 순서 지식 포인트 요약

정적 변수,정적 초기 화 블록,변수,초기 화 블록,구조 기 에 대해 초기 화 순 서 는(정적 변수,정적 초기 화 블록)>(변수,초기 화 블록)>구조 기 순 입 니 다.
순서 그림 초기 화:


우리 도 아래 의 테스트 코드 를 통 해 이 점 을 검증 할 수 있다.

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)하위 클래스 구성원 데 이 터 를 성명 의 순서에 따라 초기 화하 고 하위 클래스 구조 함수 의 나머지 부분 을 실행 합 니 다.
이상 은 이번 우리 가 소개 한 모든 관련 지식 입 니 다.여러분 의 학습 과 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기