클래스에 고정된 멤버로, 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버로, 클래스 멤버
라고도 한다.
앞에 static
을 붙이면 된다.
이는 고정된 멤버이므로, 클래스의 로딩이 끝나면 바로 사용할 수 있다.
객체마다 가지고 있어야 하는 데이터라면 인스턴스 필드로,
객체마다 가지고 있을 필요가 없는 공용적
인 데이터라면 정적 필드로!
인스턴스 필드를 이용해 실행하는 거라면 인스턴스 메소드로,
인스턴스 필드를 이용하지 않는다면 정적 메소드로!
인스턴스 필드를 사용하지 않는다는 건 매개값 없이 실행하거나, 외부에서 주어진 매개값을 가지고 메소드를 실행하는 경우를 말한다.
그동안 객체(인스턴스)를 통해 멤버를 호출할 때에는 객체.필드
혹은 객체.메소드(매개값1, 매개값2, ...)
와 같은 형태였다. 이번엔 인스턴스를 생성하지 않고 호출하는거니까 클래스를 통해 호출하면 된다!
className.field;
className.method(value1, value2, ...);
아 정말 쉽다 아마도 ?
정적 필드를 선언할 때에도 선언과 동시에 초기값을 주는 것이 보통이다.
하지마 ㄴ계산이 필요한 초기화 작업이 있을 수 있다. 인스턴스 필드는 생성자에서 초기화하지만, 정적 필드는 객체 생성 없어도 사용해야하므로, 생성자를 이용한 초기화가 불가능하다. 생성자는 객체를 생성할 때에만 실행되기 때문에!
정적 필드의 복잡한 초기화 작읍얼 위해 정적 블록
이 제공되는 것이다.
static { 초기화 내용 }
정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행된다.
정적 블록은 클래스 내부에 여러개가 선언되어도 상관 없고, 클래스가 로딩될 때 선언된 순서대로 실행된다.