package ch08_static;

public class ExStatic {
	// 외부에서 접근이 허용하고 모든 class에서 사용가능하게 데이터를 만드려면 public static을 붙여야한다.
	public static int staValue;
	private int priValue;
	
	// 생성자 보다 우선으로 출력됌.
	// 해당 클래스가 로드되는 순간 1번 가장 먼저 작동.
	// static member 의 초기화.
	static {
		System.out.println("- static area -");
		staValue = 0;
		// priValue = 0; → 생성자가 작동하기 전이라 Error !
	}
	
	public ExStatic() {
		++staValue;
		++priValue;
		System.out.println("staValue : " + staValue + " - priValue : " + priValue);	
	}
	
	public static void staticMethod() {
		System.out.println("- staticMethod() -");
		System.out.println("staValue : " + staValue);
		// System.out.println("priValue : " + priValue);  static 선언된 변수만 가능
		int a = 0;
	}
	
	public void info() {
		System.out.println("staValue : " + staValue);
		System.out.println("priValue : " + priValue);
	}
	
	
}
package ch08_static;

/*
 * static
 * → class 에서 공통으로 사용되는 멤버.
 */

public class StaticTest {

	public static void main(String[] args) {
		
		// 객체생성이라 상관없이 static area라 사용가능.

		ExStatic.staValue = 0;
		ExStatic.staticMethod();
		
		// static : 공용 → 다른 버퍼에 저장되어 관리됌. 
		// ex1 객체에서 1더하고 ex2 객체에서 1 더해서 총 2.
		ExStatic ex1 = new ExStatic();
		ExStatic ex2 = new ExStatic();
		System.out.println();
		
		ExStatic.staValue = 7;
		ex1.staValue = 10;
		ex1.info();
		ex2.staValue = 12;
		ex2.info();
		
	}

}