static block
클래스가 로딩되고 클래스 변수가 준비된 후 자동으로 실행되는 블록
하나의 클래스 안에 여러개의 static block 존재할 수 있음
instance block
인스턴스가 생성된 후 자동으로 실행되는 블록입니다.
하나의 클래스 안에 여러개의 instance block이 존재 가능하며 생성자 호출 이전에 동작
호출 순서
클래스 로딩
클래스 변수 method 영역 할당(static, non-static zone 각각 보관)
static block 실행
인스턴스 생성
instance block 실행
생성자(constructor) 호출
예제
public class NonStaticTest {
public NonStaticTest(){
System.out.println("3.생성자 호출됨");
}
{
System.out.println("2.인스턴스 블록 실행됨");
}
static {
System.out.println("1.스태틱 블록 실행됨");
}
public static void main(String[] args) {
int a=10, b=20;
NonStaticTest nonStaticTest= new NonStaticTest();
NonStaticTest nonStaticTest2= new NonStaticTest();
System.out.println(nonStaticTest.hap(a, b));
{
a=20;
b=30;
System.out.println(nonStaticTest.hap(a, b));
}
System.out.println(nonStaticTest.hap(a, b));
}
public int hap(int a, int b) {
return a + b;
}
}
1.스태틱 블록 실행됨
2.인스턴스 블록 실행됨
3.생성자 호출됨
2.인스턴스 블록 실행됨
3.생성자 호출됨
30
50
50