[객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)

2023. 6. 7. 15:22·전공/객체지향프로그래밍
728x90
반응형

정적 초기화 블록

static {
    // 정적 멤버 변수 초기화 코드
}

 

  • 실행 타이밍: 정적 초기화 블록은 클래스가 로드될 때 한 번만 실행(해당 클래스의 첫 번째 인스턴스를 생성하기 전)
  • 실행 순서: 클래스 내에 정의된 순서대로 정적 초기화 블록이 실행
  • 예외 처리: 정적 초기화 블록 내에서 발생하는 예외는 명시적으로 처리해야 함
  • 멤버 변수 초기화: 정적 초기화 블록은 주로 정적(static) 멤버 변수를 초기화하는 데 사용, 이 블록 내에서 정적 멤버 변수에 값을 할당할 수 있으며, 복잡한 초기화 로직이 필요한 경우에 유용하게 사용됨

 

예시 1

public class Main {
    public static void main(String[] args) {
        System.out.println("Cls.field1: " + Cls.field1);
        System.out.println("Cls.field2: " + Cls.field2);
    }
}

class Cls {
    static {
        field1 = "field1 In the static initialization block";
        // System.out.println(field1); // 컴파일 에러
        field2 = "field2 In the static initialization block";
        // System.out.println(field2); // 컴파일 에러
    }
    static String field1 = "field1 In the declaration";
    static String field2;
}
Cls.field1: field1 In the declaration
Cls.field2: field2 In the static initialization block

 

예시 2

class Cls1 {
    static int[] arr;
    static {
        int size = 100;
        arr = new int[size];
        for (int i = 0; i < size; i++)
            arr[i] = i;
    }
}

class Cls2 {
    static {
        int size = 100;
        arr = new int[size];
        for (int i = 0; i < size; i++)
            arr[i] = i; // 컴파일 에러
    }
    static int[] arr;
}

 

 

인스턴스 초기화 블록

{
    // 인스턴스 멤버 변수 초기화 코드
}
  • 실행 타이밍: 인스턴스 초기화 블록은 해당 클래스의 인스턴스가 생성될 때마다 실행(인스턴스가 생성되는 순간에 실행)
  • 실행 순서: 인스턴스 초기화 블록은 생성자(Constructor)보다 먼저 실행
  • 예외 처리: 인스턴스 초기화 블록 내에서 발생하는 예외를 명시적으로 처리해야 함
  • 멤버 변수 초기화: 인스턴스 초기화 블록은 주로 인스턴스 멤버 변수를 초기화하는 데 사용, 이 블록 내에서 인스턴스 멤버 변수에 값을 할당할 수 있으며, 복잡한 초기화 로직이 필요한 경우에 유용하게 사용됨

 

예시 1

class Product {
    static int count = 0;
    Integer domesticSerialNo = 10;

    {
        ++count;
        domesticSerialNo = count;
    }
    
    {
        internationalSerialNo = domesticSerialNo + 10000;
        // System.out.println(internationalSerialNo); // compile-error
    }
    
    Integer internationalSerialNo = 20;
    public Product() {}
}

 

예시 2

public class Main {
    public static void main(String[] args) {
        new Product();
    }
}

class Product {
    static int count = 0;
    Integer domesticSerialNo = 10;

    {
        ++count;
        domesticSerialNo = count;
    }
    Integer internationalSerialNo = 20;

    {
        internationalSerialNo = domesticSerialNo + 10000;
        System.out.println(internationalSerialNo);
    }
    
    static {
        count = 10;
    }
    public Product() {
        System.out.println(domesticSerialNo);
    }
}
10011
11
728x90
반응형

'전공 > 객체지향프로그래밍' 카테고리의 다른 글

[객체지향프로그래밍][Java] Exception Handling  (0) 2023.06.07
[객체지향프로그래밍][Java] Object Cloning  (0) 2023.06.07
[객체지향프로그래밍][Java] Generics 심화 내용  (0) 2023.06.03
[객체지향프로그래밍][Java] Queue 심화 내용  (0) 2023.06.01
[객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)  (0) 2023.06.01
'전공/객체지향프로그래밍' 카테고리의 다른 글
  • [객체지향프로그래밍][Java] Exception Handling
  • [객체지향프로그래밍][Java] Object Cloning
  • [객체지향프로그래밍][Java] Generics 심화 내용
  • [객체지향프로그래밍][Java] Queue 심화 내용
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    메모리 계층 구조
    42서울
    컴퓨터 구조 및 설계
    오블완
    자바
    티스토리챌린지
    백준
    반복자
    C++
    사설 문제
    리눅스
    코틀린
    컴공 포트폴리오
    명령어
    컴퓨터구조
    자료구조
    상속
    데이터패스
    추가 문제
    단일 사이클
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)
상단으로

티스토리툴바