자바 클래스 초기 화 실행 프로 세 스 분석

테스트 코드:

package com.test.ClassLaoderTest;

public  class test1 {
    public static String s_variable = "    ";
    public String init_variable = "     ";
    private String p_variable = "     ";
    //     
    static {
        System.out.println(s_variable);
        System.out.println("           ");
    }

    //      
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("         ");
    }

    //    
    public test1(){
        System.out.println("      ");
    }

    public static void main(String[] args) {

    }

}
직접 실행:
    
main 방법 에서 어떠한 호출 도 하지 않 은 상태 에서 정적 코드 블록 과 정적 변 수 를 자동 으로 호출 합 니 다.
(2)정적 변수 와 정적 방법 을 호출 합 니 다.
테스트 코드:

package com.test.ClassLaoderTest;


public class test1 {
    public static String s_variable = "    ";
    public String init_variable = "     ";
    private String p_variable = "     ";
    //     
    static {
        System.out.println(s_variable);
        System.out.println("           ");
    }

    //      
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("         ");
    }

    //    
    public test1(){
        System.out.println("      ");
    }

    //    
    public static void test1(){
        System.out.println("      ");
    }
    public static void main(String[] args) {
        System.out.println(test1.s_variable);
        test1.test1();
    }

}
실행:
  
결론:정적 방법/정적 변 수 를 호출 할 때 정적 코드 블록 에 만 있 고 나머지 코드 블록/구조 방법 은 불 러 오지 않 습 니 다.
(3)생 성 대상:

package com.test.ClassLaoderTest;


public class test1 {
    public static String s_variable = "    ";
    public String init_variable = "     ";
    private String p_variable = "     ";
    //     
    static {
        System.out.println(s_variable);
        System.out.println("           ");
    }

    //      
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("         ");
    }

    //    
    public test1(){
        System.out.println("      ");
    }

    //    
    public static void test1(){
        System.out.println("      ");
    }
    public static void main(String[] args) {
        test1 t1 = new test1();
    }

}
실행 결과:
    
출력 내용:
정적 변수
정적 코드 블록 초기 화 실행
공개 변수
개인 변수
코드 블록 초기 화 실행 됨
저 는 구조 법 입 니 다.
결론:대상/실례 화 를 만 들 때 호출 순서:정적 코드 블록->코드 초기 화->구조 방법,마지막 으로 실행 하 는 것 이 구조 방법 입 니 다.
(4)계승 관계 가 있 는 클래스 초기 화 실행 절차:
환경:
부모 클래스:

package com.test.ClassLaoderTest;

public class father {
    public static String s_variable = "      ";
    public String init_variable = "       ";
    private String p_variable = "       ";
    //       
    static {
        System.out.println(s_variable);
        System.out.println("             ");
    }

    //        
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("           ");
    }

    //    
    public father(){
        System.out.println("        ");
    }

    //      
    public static void test1(){
        System.out.println("        ");
    }
}
    test1.java:
아버지 아버지:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "      ";
    public String init_variable = "       ";
    private String p_variable = "       ";
    //       
    static {
        System.out.println(s_variable);
        System.out.println("             ");
    }

    //        
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("           ");
    }

    //      
    public test1(){
        System.out.println("        ");
    }

    //      
    public static void test1(){
        System.out.println("        ");
    }

    public static void main(String[] args) {
        
    }
}
main 방법 은 아무런 조작 도 하지 않 고 실행:
    
extends 가 계승 되면 부모 클래스 정적 코드 블록 을 우선 호출 합 니 다.
(5)계승 관계 에서 의 정적 호출 방법:
하위 클래스 를 수정 하면 됩 니 다:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "      ";
    public String init_variable = "       ";
    private String p_variable = "       ";
    //       
    static {
        System.out.println(s_variable);
        System.out.println("             ");
    }

    //        
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("           ");
    }

    //      
    public test1(){
        System.out.println("        ");
    }

    //      
    public static void test1(){
        System.out.println("        ");
    }

    public static void main(String[] args) {
        test1.test1();
        father.test1();
    }
}
실행:
      
결과:
부모 클래스 정적 변수
부모 클래스 정적 코드 블록 초기 화 실행
하위 클래스 정적 변수
하위 클래스 정적 코드 블록 초기 화 실행
이것 은 하위 정적 방법 이다.
이것 은 부류 의 정적 방법 이다
main 방법 중 정적 방법 을 우선 호출 하 는 사람 은 누 구 를 우선 불 러 옵 니까?
(6)상속 관계 에 있 는 창설 대상:
코드:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "      ";
    public String init_variable = "       ";
    private String p_variable = "       ";
    //       
    static {
        System.out.println(s_variable);
        System.out.println("             ");
    }

    //        
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("           ");
    }

    //      
    public test1(){
        System.out.println("        ");
    }

    //      
    public static void test1(){
        System.out.println("        ");
    }

    public static void main(String[] args) {
        test1 t1 =new test1();
    }
}
실행:
   
결과:
부모 클래스 정적 변수
부모 클래스 정적 코드 블록 초기 화 실행
하위 클래스 정적 변수
하위 클래스 정적 코드 블록 초기 화 실행
부모 클래스 공개 변수
부모 클래스 개인 변수
부모 클래스 초기 화 코드 블록 이 실행 되 었 습 니 다.
나 는 부류 구조 방법 이다.
하위 클래스 공개 변수
하위 클래스 개인 변수
하위 클래스 초기 화 코드 블록 이 실행 되 었 습 니 다.
저 는 하위 구조 방법 입 니 다.
결론:결 과 를 통 해 알 수 있 듯 이 하위 클래스 든 부모 클래스 의 정적 코드 블록 이 든 정적 코드 블록 은 어디 에 있 든 아빠 등급 이 고 가장 먼저 불 러 옵 니 다.test 1 대상 을 만 들 때 부모 코드 블록 을 우선 불 러 옵 니 다.그러면 그의 초기 화 실행 절 차 는 다음 과 같다.부모 클래스 정적 코드 블록>하위 클래스 정적 코드 블록>부모 클래스 초기 화 코드 블록>부모 클래스 구조 방법>하위 코드 블록>하위 클래스 구조 방법
(7)상속 관계 에 있 는 부모 클래스 생 성 대상:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "      ";
    public String init_variable = "       ";
    private String p_variable = "       ";
    //       
    static {
        System.out.println(s_variable);
        System.out.println("             ");
    }

    //        
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("           ");
    }

    //      
    public test1(){
        System.out.println("        ");
    }

    //      
    public static void test1(){
        System.out.println("        ");
    }

    public static void main(String[] args) {
        father father = new father();
    }
}
실행:
  
결과:
부모 클래스 정적 변수
부모 클래스 정적 코드 블록 초기 화 실행
하위 클래스 정적 변수
하위 클래스 정적 코드 블록 초기 화 실행
부모 클래스 공개 변수
부모 클래스 개인 변수
부모 클래스 초기 화 코드 블록 이 실행 되 었 습 니 다.
나 는 부류 구조 방법 이다.
결론:우선 실행 되 는 것 은 두 가지 정적 코드 블록 이 고 그 다음 에 부모 유형의 코드 블록 과 구조 방법 입 니 다.서브 클래스 의 코드 블록 과 구조 방법 이 실행 되 지 않 은 것 은 인 스 턴 스 화 서브 클래스 가 없 기 때문에 그 가 없 을 것 입 니 다.그러면 대상 을 만 들 때 만 코드 블록 과 구조 방법 을 호출 할 수 있 습 니 다.
자바 류 초기 화 실행 절차 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 류 초기 화 실행 절차 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기