반응형
728x170
정적(static)이란 '고정'의 의미를 갖고 있다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
1 2 3 4 5 6 7 8 | class A { static int num = 1; static void amt() { } } class B { A.num; A.amt(); } |
위 static으로 작성 해놓은 변수와 메소드가 정적 멤버이다.
정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다.
이것에 대한 접근은 클래스.필드; 클래스.메소드( 매개값) 으로 호출할 수 있다.
여기서 가장 중요한 특징은
인스턴스 필드는 생성자에서 초기화되지만, 정적 필드는 객체 생성 없이도 사용해야 하므로 생성자에서 초기화 작업을 할 수 없다. 생성자는 객체 생성 시에만 실행되기 때문이다.
그렇다면 정적 필드를 위한 초기화 작업은 어디에서 해야 하나??
이것을 위해서 정적 블록을 제공한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class A { static int num = 1; static void amt() { } static { num = 2; } } |
위와 같이 static { } 으로 하는 곳이 정적 블록이며 정적 필드를 초기화 할 수 있다.
반응형
그리드형