static🟨 생성자에서 초기화를 하지 않는 정적 필드
➡ 정적필드는 객체 생성 없이도 사용할 수 있기 때문에 생성자에서 초기화 작업을 하지 않는다. 생성자는 객체 생성 후 실행되기 때문이다.
🟥 인스턴스 멤버 사용불가
정적 메소드와 정적 블록은 객체가 없어도 실행된다는 특징 때문에 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다. 또한 객체 자신의 참조인 this도 사용할 수 없다.
➡ 객체 생성 후 참조변수로 접근하는 것은 가능하다.
위 예시들은 우리가 계속 사용하고 있는 main() 메소드를 생각하면 쉽다. main()함수도 static class 이기 때문이다.
객체마다 저장할 필요가 없고, 여러 개의 값을 가지면 안되는 수를 상수라고 한다.
이런 상수의 특징에 맞게 java에서는static이면서 final인 특성을 가져야 한다.
static final <타입> 상수 = 초기값;복잡한 초기화가 필요할 경우에는 정적 블록에서 초기화 할 수도 있다.
static final <타입> 상수;
static {
상수 = 초기값;
}
⬛ 또한 상수는 정적 필드 이므로 클래스로 접근해서 읽을 수 있다.
ex ) Math.PI