자바 정적 코드 블록, 구조 코드 블록, 구조 방법의 실행 순서

3904 단어 Java
자바 정적 코드 블록, 구조 코드 블록, 구조 방법의 실행 순서
정적 코드 는 비 정적 코드 보다 우선 합 니 다. static 에 의 해 수 정 된 구성원 은 모두 클래스 구성원 이기 때문에 JVM 이 클래스 를 불 러 올 때 불 러 올 때 실 행 됩 니 다. static 에 의 해 수 정 된 구성원 도 인 스 턴 스 구성원 이 라 고 불 리 며 대상 을 만들어 야 메모리 에 불 러 옵 니 다.그래서 정적 은 정적 이 아 닌 것 을 우선 합 니 다.구조 기 (구조 방법) 를 실행 할 때 방법 체 를 집행 하기 전에 암시 적 3 단계 가 존재 한다. 1. 슈퍼 문 구 는 다음 과 같은 세 가지 상황 이 발생 할 수 있다. 1) 구조 방법 체 의 첫 줄 은 this 문 구 였 고 암시 적 3 단계, 2) 구조 방법 체 의 첫 줄 은 슈퍼 문 구 였 으 며 해당 하 는 부류 의 구조 방법 을 호출 했다.3) 구조 방법 체 의 첫 번 째 줄 은 this 구문 도 슈퍼 구문 도 아니 고 암시 적 으로 슈퍼 (), 즉 부모 류 의 기본 구조 방법 을 호출 하 는 것 도 하나의 부모 류 가 기본 구조 방법 을 제공 하 는 이유 이다.2. 비정 상 변 수 를 초기 화 합 니 다.3. 구조 코드 블록.이 를 통 해 알 수 있 듯 이 구조 코드 블록 은 구조 방법의 방법론 보다 우선 하지만 this 키워드 와 슈퍼 키 워드 는 동시에 나타 나 지 못 하고 코드 의 첫 줄 에 만 나타 날 수 있다.this 키워드 가 나 오 면 암시 적 세 단 계 는 실행 되 지 않 습 니 다.예 를 들 어 아래 코드 와 실행 결 과 를 분석 하고 실행 절차 인 Step 1 – Step 7 을 주석 으로 표시 했다.즉, 여러 구조 방법 을 재 귀적 으로 호출 할 때 구조 코드 블록 은 마지막 (즉, 방법 체 첫 줄 은 this 문장의 것 이 아니 라) 그 구조 방법 이 실행 되 기 전에 만 실 행 됩 니 다!
public class Test {
    public static int a = 0;

    static {// Step 1
        a = 10;
        System.out.println("        a=" + a);
    }

    {// Step 4
        a = 8;
        System.out.println("      (     )   a=" + a);
    }

    public Test() {
        this("        1,a=" + a); // Step 2
        System.out.println("         a=" + a);// Step 7
    }

    public Test(String n) {
        this(n, "        2,a=" + a); // Step 3
        System.out.println("      1   a=" + a); // Step 6
    }

    public Test(String s1, String s2) {
        System.out.println(s1 + ";" + s2);// Step 5
    }

    public static void main(String[] args) {
        Test t = null;// JVM  Test ,       
        System.out.println("  new  Test  :");
        t = new Test();
    }
}

실행 결과:
        a=10
  new  Test  :
      (     )   a=8
        1a=102a=10
      1   a=8
         a=8

http://bbs.csdn.net/topics/391001417

좋은 웹페이지 즐겨찾기