자바 클래스 의 변수 초기 화

1906 단어 JavaJVM

public class Test {
    int a;
    static int b = 123;
    final static int c;
    void init(){
        int d;
    }

    public static void main(String[] args) {
        int e;
        System.out.println(e);
    }
}

위의 Test 클래스 에서 5 개의 서로 다른 유형의 변 수 를 정 의 했 습 니 다. 그러면 이 변 수 는 어떻게 초기 화 됩 니까?먼저 한 가지 성명 을 해 야 한다. 상술 한 코드 는 문제 가 있어 서 컴 파일 이 통과 되 지 않 는 다.
먼저 자바 에서 변수 에 대한 유형 을 명 확 히 하 겠 습 니 다. 자바 에는 세 가지 변수 유형, 클래스 변수, 인 스 턴 스 변수, 부분 변수 가 있 습 니 다.부분 변수의 생명 주 기 는 부분 변수 방법 을 설명 하 는 성명 주기 와 같 습 니 다. 방법 이 호출 될 때 만 부분 변 수 를 만 들 고 방법 집행 이 끝나 면 부분 변 수 를 소각 합 니 다.
클래스 변수의 초기 화 는 두 단계 로 나 뉜 다.첫 번 째 는 클래스 로 딩 준비 단계 입 니 다.준비 단 계 는 클래스 변수 에 정식으로 메모 리 를 할당 하고 클래스 변수의 초기 값 을 설정 합 니 다.클래스 변수 가 기본 데이터 형식 이 라면 초기 값 은 대응 하 는 초기 값 입 니 다. 대상 형식 이 라면 초기 값 은 null 이 고 아래 코드 를 실행 하면 결 과 는 null, 0 입 니 다.
public class Test {
    static Integer b;
    static int c;
    
    public static void main(String[] args) {
        System.out.println(b+","+c);
    }
}

준비 단계 에 또 하나의 예외 상황 이 있 습 니 다. 만약 에 클래스 변수 가 final 키워드 에 의 해 동시에 수식 되면 준비 단 계 는 변 수 를 직접 할당 합 니 다.다음 코드 에서 c 의 값 은 준비 단계 에서 123 으로 직접 할당 합 니 다.
public class Test {
    final static int c = 123;
    public static void main(String[] args) {
        System.out.println(c);
    }
}

final 키워드 에 수식 되 지 않 은 클래스 변수 에 대해 할당 과정 은 클래스 로드 과정 에서 초기 화 단계 입 니 다.실례 변 수 는 대상 이 실례 화 될 때 대상 과 함께 자바 더미 에 분 배 됩 니 다.한편, 클래스 변 수 는 클래스 로 딩 과정 에서 쌓 인 논리 적 구분 인 방법 구역 에 분 배 됩 니 다.
글 의 첫 번 째 예 로 돌아 가면 인 스 턴 스 변수 a 와 클래스 변수 b 의 분 배 는 위 에서 말 한 것 처럼 초기 화 됩 니 다. 상수 c 는 준비 단계 에서 직접 할당 되 고 여기 서 c 에 대한 할당 이 없 기 때문에 컴 파일 오류 가 발생 합 니 다.부분 변수 d 는 방법 init 의 호출 에 따라 스 택 에 분 배 됩 니 다. 부분 변수 e 의 정 의 는 문제 가 없 지만 할당 되 지 않 은 부분 변 수 는 접근 할 수 없습니다.
사실 여기 에는 작은 디 테 일이 있 습 니 다. 국부 변수 가 생 성 된 후에 사용 되 지 않 으 면 컴 파일 러 는 이 변수의 정 의 를 무시 하고 컴 파일 된 class 파일 을 볼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기