[JAVA] 멤버변수의 초기화 시기와 순서 [클래스변수와 인스턴스변수의 초기화 순서]

2022. 9. 10. 15:09·◎ Java/Java☕
728x90
반응형


1. 멤버변수의 초기화 시기와 순서

클래스변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번 초기화 된다.
인스턴스변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이루어진다.

클래스변수의 초기화 순서 : 기본값 → 명시적초기화 → 클래스 초기화 블럭
인스턴스변수의 초기화 순서 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자

2. 멤버변수 초기화 순서 예시

class InitTest {
    // 명시적 초기화
    static int cv = 1;
    int iv = 1;
    
    static { cv = 2; } // 클래스 초기화 블럭
    { iv = 2; }        // 인스턴스 초기화 블럭
    
    // 생성자
    InitTest() {
        iv = 3;
    }
}

 

클래스변수 cv와 인스턴스변수 iv가 초기화 되는 과정


클래스변수 초기화(1 ~ 3) : 클래스가 처음 메모리에 로딩될 때 차례대로 수행
인스턴스변수 초기화(4 ~ 7) : 인스턴스를 생성할 때 차례대로 수행

* 클래스변수는 항상 인스턴스변수보다 먼저 생성되고 초기화 된다.

 

  1. cv가 메모리(method area)에 생성되고, cv에는 int형의 기본값인 0이 저장된다.
  2. 명시적 초기화에 의해 cv에 1이 저장된다.
  3. 클래스 초기화 블럭이 수행되어 cv에는 2가 저장된다.
  4. InitTest 클래스의 인스턴스가 생성되면서 iv가 메모리(heap)에 생성되며, 기본값 0이 저장된다.
  5. 명시적 초기화에 의해 iv에 1이 저장된다.
  6. 인스턴스 초기화 블럭에 의해 iv에 2가 저장된다.
  7. 생성자가 수행되어 iv에는 3이 저장된다.

 

참고문헌 : 남궁성(2016), Java의 정석, 도우출판


728x90
반응형
'◎ Java/Java☕' 카테고리의 다른 글
  • [JAVA] 클래스 간의 관계 [Composite, 포함관계, 관계 결정하기]
  • [JAVA] 상속(inheritance)이란? [상속의 개념, 조상 클래스와 자손 클래스]
  • [JAVA] 명시적 초기화(explicit initialization)와 초기화 블럭(initialization block) [변수를 초기화하는 방법]
  • [JAVA] 변수의 초기화란? [변수를 선언하고 처음으로 값을 저장하는 것]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (1053)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (30)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ Infra & DevOps (36)
        • LGTM Stack🔭 (5)
        • Kafka🐦‍🔥 (3)
        • Kubernetes🚢 (10)
        • KubeCon Japan 2026⚓ (18)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (57)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (5)
        • 오늘가챠🃏 (16)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (80)
        • 백준(BOJ)👨🏻‍💻 (71)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
      • ◈ Study (130)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 알고리즘(Algorithm)🎡 (14)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (35)
        • 웹 보안(Web Security)🔐 (11)
        • 인공지능 AI🛸 (8)
      • ◈ 공부모임 (60)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (20)
        • 국가기술자격 서포터즈🌻 (12)
      • ◈ 자격증 공부 (48)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 정보보안기사⚜️ (11)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (124)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (55)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 반응형
    250x250
  • 태그

    CSS
    spring boot
    백준 티어
    백준
    자바스크립트
    코딩 테스트
    BOJ
    코딩
    꿀팁
    jsp
    일상
    프로그래밍
    SQL
    Database
    Error Note
    javascript
    Project
    Java
    spring
    Oracle
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[JAVA] 멤버변수의 초기화 시기와 순서 [클래스변수와 인스턴스변수의 초기화 순서]
상단으로

티스토리툴바