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 |