정적멤버란는 클래스에 고정된 필드와 메소드를 말한다. 정적필드, 정적메소드라 하는데 객체를 생성하지 않고 클래스로 바로 접근해서 사용이 가능하다.

 

 int vI01 에는 10값을 주고 ++을 추가했다. int vI0220을 주고 static을 붙였는데 여기서 차이가 발생한다. vI01은 여러개의 객체를 생성해도 11이 동일하게 생성되는데 static을 붙이면 객체 생성 시마다 21, 22, 23으로 ++ 값이 계속 누적된다.

 

class StaticEx01 {

 

int vI01=10;

//static 적용

static int vI02=20;

 

void mSum(){

vI01++;

vI02++;

}

 

void mPrint(){

System.out.println("vI01++ 값의 변화 : " + vI01);

System.out.println("vI02++ 값의 변화 : " + vI02);

System.out.println();

}

public static void main(String[] args) {

 

StaticEx01 obj1 =new StaticEx01();

StaticEx01 obj2 =new StaticEx01();

StaticEx01 obj3 =new StaticEx01();

 

obj1.mSum(); obj1.mPrint(); //결과 11,21

obj2.mSum(); obj2.mPrint(); //결과 11,22

obj3.mSum(); obj3.mPrint(); //결과 11,23

}

}

 

 정적 초기화블록은 초기화 시 사용하는데 생성자보다 우선한다는 특징이 있다.

Static{ } 형식으로 사용한다.

 

class StaticEx02 {

 

// static 블럭은 생성자 보다 우선한다는 것을 확인할 수 있는 예제

StaticEx02(){

System.out.println("생성자 확인");

}

 

static{

System.out.println("static 블럭 확인");

}

 

public static void main(String[] args) {

StaticEx02 obj =new StaticEx02();

}

}

 

<결과>

static 블럭 확인

생성자 확인

 

 생성자가 더 상위에 있는데도 static이 먼저 읽힘을 알 수 있다.

 


+ Recent posts