클래스 초기화 순서

2025. 3. 13. 09:25·SW 공학 & 프로그래밍 언어/Java
728x90
반응형

문득, JVM구조를 공부하다가 초기화 순서가 정확히 어떻게 진행 될까? 생각해본적이 있다.

언제 초기화 되는걸까?

  1. 인스턴스를 생성할 때(new 객체 생성)
  2. 클래스의 정적 메소드를 호출할 때 클래스가 초기화됨
  3. 클래스의 정적 변수 값이 할당되거나 사용될 때

초기화 순서는?

  1. 정적 변수 초기화
    • 필드가 선언된 순서대로 초기화
  2. 정적 블록 실행
    • static {}
    • 간혹 정적 블록이 먼저 실행될 수도 있음
  3. 인스턴스 변수 초기화
    • 인스턴스 변수가 선언된 순서대로 초기화됨
  4. 인스턴스 블록 초기화
    • {}
  5. 생성자 실행

예제

class Example {
    static int staticVar = initializeStaticVar();

    static {
        System.out.println("정적 블록 실행");
    }

    int instanceVar = initializeInstanceVar();

    {
        System.out.println("인스턴스 초기화 블록 실행");
    }

    Example() {
        System.out.println("생성자 실행");
    }

    static int initializeStaticVar() {
        System.out.println("정적 변수 초기화");
        return 100;
    }

    int initializeInstanceVar() {
        System.out.println("인스턴스 변수 초기화");
        return 200;
    }

    public static void main(String[] args) {
        System.out.println("main 메소드 실행");
        Example ex1 = new Example();
        Example ex2 = new Example();
    }
}

 

결과

정적 변수 초기화
정적 블록 실행
main 메소드 실행
인스턴스 변수 초기화
인스턴스 초기화 블록 실행
생성자 실행
인스턴스 변수 초기화
인스턴스 초기화 블록 실행
생성자 실행

결론

  • 순서: 정적 필드 > 정적 블록 > 인스턴스 필드 > 인스턴스 블록 > 생성자
  • 정확한 흐름을 이해하면 예측 가능한 코드 작성이 가능함
728x90
반응형
저작자표시 비영리 (새창열림)

'SW 공학 & 프로그래밍 언어 > Java' 카테고리의 다른 글

Java 버전별 변천사 ( Java 6 ~ )  (2) 2025.03.15
자바의 특징  (0) 2025.03.13
OpenJDK vs Oracle JDK 차이점  (1) 2025.03.10
[JAVA] JCP, JSR, TCK란? 자바 표준의 개발 과정과 역할  (0) 2025.03.10
쉬운, 클래스와 객체 개념  (1) 2025.03.05
'SW 공학 & 프로그래밍 언어/Java' 카테고리의 다른 글
  • Java 버전별 변천사 ( Java 6 ~ )
  • 자바의 특징
  • OpenJDK vs Oracle JDK 차이점
  • [JAVA] JCP, JSR, TCK란? 자바 표준의 개발 과정과 역할
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (130)
      • IT 지식 (6)
      • CS (66)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (41)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (6)
      • SW 공학 & 프로그래밍 언어 (5)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      chmod
      su
      DI
      비트연산
      알고리즘
      man
      문제해결
      passwd
      whereis
      apropos
      ADsP
      암호설정
      cifs
      Chage
      DTO
      /etc/passwd
      REST API
      단반향
      리눅스
      불변
      자바
      docker
      java
      스프링부트
      1급
      whatis
      분석기법
      which
      usermod
      2차
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    클래스 초기화 순서
    상단으로

    티스토리툴바