10-1 클래스 변수
- static 붙으면 클래스 변수 static 변수라고 부르기도 한다
- 인스턴스 변수가 아니다
- 공유하는 변수이다
- 임의의 클래스에 자리를 빌린다 따라서 이 클래스에서 지정하는 접근 수준 지시자를 따른다
- 외부에서 클래스변수에 접근하는 경우 인스턴스 이름으로 접근하는 것보다는 클래스 이름으로 접근하는 것이 좋다
- 클래스 변수의 적절한 초기화 위치는 생성자 밖의 영역이다 생성자 안에 두면 리셋된다
- 인스턴스마다 가질 필요 없는 변수->클래스 변수
- 외부에서 참조한다면 public으로 선언
10-2 클래스 메소드
- 클래스 메소드의 성격 및 접근 방법은 클래스 변수와 동일하다
- 단순 기능 제공이 목적인 메소드, 인스턴스 변수와 관련 지을 이유가 없는 메소드-> static으로 선언하는 것이 옳다
- 클래스 메소드는 인스턴스 변수와 공간적으로 분리되어 있고 어떤 인스턴스 변수에 접근할 지 결정할 수도 없으므로 인스턴스 변수에 접근할 수 없다
10-3 System.out.println() 그리고 public static void main()
- System은 클래스 이름
- out은 클래스 변수
- println은 out이 참조하는 인스턴스 내부의 메소드
- public으로 두기로 약속된 것으로 이해한다
- main은 하나여야 한다 따라서 임의의 클래스에 static으로 선언한다
10-4 또 다른 용도의 static 선언
- static 초기화 블록
- static변수 초기화는 가장 보편적으로 선언과 동시에 초기화하는 방법이 있지만
- 내가 지정해주는 값이 아니라 컴퓨터에서 얻어오는 값으로 초기화할 때는 static 초기화 블록을 쓴다
- 인스턴스 생성과 관계없이 static 변수가 메모리 공간에 할당된 직후에 static 초기화 블록 내부의 코드가 실행된다