자바 클래스 초기 화 블록 요약

5104 단어 Java자바class
자바 는 구조 적 방법 을 사용 하여 하나의 대상 을 초기 화 합 니 다. 구조 적 방법 을 사용 하여 전체 자바 대상 의 상태 초기 화 를 완성 한 다음 에 자바 대상 을 프로그램 에 되 돌려 주어 이 자바 대상 의 정 보 를 더욱 완전 하 게 합 니 다.구조 적 방법 과 매우 유사 한 역할 을 하 는 것 은 초기 화 블록 이 며, 자바 대상 을 초기 화 할 수도 있다.어느 정도 초기 화 블록 은 구조 방법의 보충 이 고 초기 화 블록 은 구조 방법 이 실행 되 기 전에 실 행 됩 니 다.한 클래스 에 여러 개의 초기 화 블록 이 있 습 니 다. 같은 유형의 초기 화 블록 사이 에는 순서 가 있 습 니 다. 앞에서 정 의 된 초기 화 블록 이 먼저 실행 되 고 뒤에 정 의 된 초기 화 블록 이 실 행 됩 니 다.
블록의 정의 형식 초기 화: [수식 자] {/ 블록의 실행 가능 한 코드 초기 화
}
초기 화 블록 의 수식 자 는 static 일 수 있 으 며, static 수식 을 사용 한 초기 화 블록 은 정적 초기 화 라 고 합 니 다.초기 화 블록 에 있 는 코드 는 부분 변 수 를 정의 하고 다른 대상 을 호출 하 는 방법, 분기, 순환 문 구 를 사용 하 는 등 모든 실행 가능 한 문 구 를 포함 할 수 있 습 니 다.
초기 화 블록 은 구조 방법 과 달리 초기 화 블록 은 고정 적 으로 실 행 된 코드 로 어떠한 인자 도 받 을 수 없습니다.여러 구조 방법 중의 동일 한 코드 를 초기 화 블록 에 추출 하여 정의 하면 초기 화 코드 의 복용 을 더욱 향상 시 키 고 전체 응용의 유지보수 성 을 높 일 수 있다.
정적 초기 화 블록: 초기 화 블록 을 정의 할 때 static 수식 자 를 사용 하면 이 초기 화 블록 은 정적 초기 화 블록 이 되 고 클래스 초기 화 블록 이 라 고도 합 니 다.정적 초기 화 블록 은 클래스 와 관련 된 것 입 니 다. 시스템 은 클래스 초기 화 단계 에서 정적 초기 화 블록 을 실행 합 니 다. 대상 을 만 들 때 만 실행 하 는 것 이 아 닙 니 다.따라서 정적 초기 화 블록 은 항상 일반 초기 화 블록 보다 먼저 실 행 됩 니 다.정적 초기 화 블록 도 클래스 의 정적 구성원 에 속 합 니 다. 정적 구성원 이 비정 상 구성원 에 게 접근 할 수 없 는 규칙 을 따라 야 하기 때문에 정적 초기 화 블록 은 비정 상 구성원 에 게 접근 할 수 없습니다.
속성, 방법, 구조 방법 과 자유 블록 은 모두 클래스 의 구성원 입 니 다. 클래스 의 대상 을 만 들 때 클래스 의 각 구성원 의 실행 순서: 1. 부모 류 정적 구성원 과 정적 초기 화가 빠 르 고 코드 에 나타 난 순서대로 실 행 됩 니 다.2. 하위 클래스 정적 구성원 과 정적 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.3. 부모 클래스 의 인 스 턴 스 구성원 과 인 스 턴 스 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.4. 부류 의 구조 방법 을 집행 한다.5. 하위 클래스 인 스 턴 스 구성원 과 인 스 턴 스 초기 화 블록 은 코드 에 나타 난 순서대로 실 행 됩 니 다.6. 하위 클래스 의 구조 방법 을 집행 한다.
정적 초기 화 블록 과 비 정적 초기 화 블록 의 차이 점 은?비 정적 초기 화 블록 은 주로 대상 의 초기 화 작업 에 사 용 됩 니 다. 대상 을 만 들 때마다 한 번 씩 호출 합 니 다. 그 실행 순 서 는 구조 방법 전에 있 습 니 다.블록 을 초기 화하 기 전에 static 수식 이 있 으 면 정적 초기 화 블록 입 니 다.비정 상 구성원 은 정적 방법 에서 사용 할 수 없고 정적 초기 화 블록 에서 도 사용 할 수 없 기 때문에 정적 초기 화 블록 은 주로 정적 변수 와 정적 방법 을 초기 화 하 는 데 사 용 됩 니 다. 정적 초기 화 블록 은 한 번 만 호출 되 고 클래스 가 처음으로 메모리 에 불 러 올 때 반드시 대상 을 만들어 야 실행 되 는 것 이 아 닙 니 다.정적 초기 화 블록 이 비 정적 초기 화 블록 보다 먼저 실 행 됩 니 다.
우 리 는 코드 예 시 를 볼 수 있 고 실행 순 서 는 뚜렷하게 볼 수 있다.
class Root {
     
    static {
        System.out.println("Root       ");
    }
    {
        System.out.println("Root       ");
    }
    public Root(){
        System.out.println("Root         ");
    }
}
class Mid extends Root{
     
    static {
        System.out.println("Mid        ");
    }
    {
        System.out.println("Mid        ");
    }
    public Mid(){
        System.out.println("Mid        ");
    }
    public Mid(String msg){
        this();
        System.out.println("Mid        ,    : " + msg);
    }
}
class Leaf extends Mid {
     
    static{
        System.out.println("Leaf       ");
    }
    {
        System.out.println("Leaf       ");
    }
    public Leaf(){
        super("test");
        System.out.println("  Leaf    ");
    }
}
public class Test {
     
    public static void main(String[] args){
        new Leaf();
        new Leaf();

    }
}

실행 결과:
Root 의 정적 초기 화 블록 Mid 의 정적 초기 화 블록 Leaf 의 정적 초기 화 블록 Root 의 일반 초기 화 블록 Root 의 매개 변수 없 는 구조 기 Mid 의 일반 초기 블록 Mid 의 매개 변수 없 는 구조 기 Mid 의 매개 변수 없 는 구조 기그 매개 변수: test Leaf 의 일반 초기 화 블록 은 Leaf 의 구조 기 Root 의 일반 초기 화 블록 Root 의 매개 변수 없 는 구조 기 Mid 의 일반 초기 블록 Mid 의 매개 변수 없 는 구조 기 Mid 의 매개 변수 구조 기 를 실행 합 니 다. 그 매개 변수: test Leaf 의 일반 초기 화 블록 은 Leaf 의 구조 기 를 실행 합 니 다.
결 과 를 통 해 알 수 있 듯 이 정적 초기 화 블록 이 가장 먼저 실행 되 었 고 우 리 는 두 개의 대상 을 만 들 었 지만 한 번 만 실 행 했 고 정적 초기 화 블록 이 한 번 만 호출 되 었 다 는 관점 을 충분히 입증 했다.각 방법의 집행 순 서 는 우리 가 위 에서 말 한 순서 와 일치한다.

좋은 웹페이지 즐겨찾기