초기화 블럭

2022. 5. 23. 15:56Java

◎ 초기화 블럭

-> 초기화 블록의 종류로 "클래스 초기화 블럭"과 "인스턴스 초기화 블럭"이 있다.

-> 클래스 초기화 블럭 : 클래스 변수의 초기화에 사용된다. 인스턴스 초기화 블럭에 static을 붙인다.

-> 인스턴스 초기화 블럭 : 인스턴스 변수의 초기화에 사용된다. 클래스 내에 블럭{}을 만들고 그 안에 코드를 작성한다.

-> 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되고, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.

-> 생성자 보다 인스턴스 초기화 블럭이 먼저 수행된다.

-> 예제

public class BlockEx {
	
	// 클래스 초기화 블럭
	static {
		System.out.println("static initialization block");
	}
	
	
	// 인스턴스 초기화 블럭
	{
		System.out.println("instance initialization block");
	}
	
	public BlockEx() {
		System.out.println("생성자");
	}

	public static void main(String[] args) {
		System.out.println("BlockEx be = new BlockEx();");
		BlockEx be = new BlockEx();
		
		System.out.println("BlockEx be2 = new BlockEx()");
		BlockEx be2 = new BlockEx();

	}

}

-> 결과

☞ 결과를 보면 클래스 초기화 블럭이 가장 먼저 수행된다. 이후 main메서드, 인스턴스 초기화 블럭, 생성자 순으로 출력이 된다.

☞ 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한 번만 수행되기 때문에 두번째에서는 출력이 되지 않았고, 인스턴스 초기화 블럭은 인스턴스가 생성될 때 마다 수행되었다.

 

◎ 멤버변수의 초기화 시기, 순서

-> 클래스 변수의 초기화 시점 : 클래스가 처음 로딩도리 때 한번 초기화 된다.

-> 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때 마다 인스턴스별로 초기화 된다.

-> 클래스 변수의 초기화 순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭

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

-> 예제

class Entrance{
	static int count = 0;	// 생성된 인스턴스의 수를 저장하기 위한 변수
	int number;				// 인스턴스 고유 번호
	
	{
		
		++count;			
		number = count; 
	}
}

public class initializationEx {

	public static void main(String[] args) {
		Entrance e1 = new Entrance();
		Entrance e2 = new Entrance();
		Entrance e3 = new Entrance();
		
		System.out.println(e1.number + "번 손님 입장");
		System.out.println(e2.number + "번 손님 입장");
		System.out.println(e3.number + "번 손님 입장");
		
		System.out.println("총 입장객은 " + Entrance.count + "명 입니다.");
		
	}

}

-> 결과

☞ Entrance 클래스의 인스턴스를 생성할 때 마다 인스턴스 블럭이 수행되어 클래스 변수 count를 1증가시키고 인스턴스 변수 number에 저장한다.

 

★ 참고 및 출처

자바의 정석

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001&partner=googlek&BSCPN=ORM&BSPRG=ADWORDS&BSCCN1=89221&utm_source=ADWORDS&utm_medium=cpc&utm_term=JAVA%C0%C7%C1%A4%BC%AE&gclid=Cj0KCQjwm6KUBhC3ARIsACIwxBh0GfDwaYEn-OxcsMebsH6l7xUyjucQnjB91bKGtzZvvFY8dkB1ULQaAnlhEALw_wcB

'Java' 카테고리의 다른 글

오버라이딩  (0) 2022.05.23
상속  (0) 2022.05.23
생성자  (0) 2022.05.23
클래스 메서드 & 인스턴스 메서드  (0) 2022.05.22
변수  (0) 2022.05.22