Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당됩니다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됩니다. 그렇기에 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있습니다.
class A{
int m = 3; # 객체를 생성한 후 사용가능
static int n =5; #객체 생성 없이 사용가능
static 필드 같은 경우 저장되는 위치는 static영역에 저장이 된다.
하지만 특이한 점은, 객체 내부에 정적필드 또한 존재한다는 것이다. 다만 실제 저장 공간은 정적 영역 내부에 있으며, 객체 내부의 n은 실제 정적필드의 저장 공간의 참좃값만을 포함하고 있다. 따라서 인스턴스 필드처럼 참조변수명으로도 사용할 수 있음.
반드시 기억할 것은 "정적 필드는 객체 간 공유 변수의 성질이 있다는 것이다"
static 메서드는 static 필드와 동일하다. 하지만 다른 점은 인스턴스 메서드와 정적 메서드 모두 메모리의 첫 번째 영역에 존재한다는 것이다. 다만 인스턴스 메서드는 인스턴스 메서드 영역, 정적 메서드는 클래스 내부에 존재하는 것만 차이가 난다.
또한, 정적 메서드 내부에는 정적 멤버만 사용할 수 있다.