[Java] static
★static이란 정적변수, 메소드를 만들기 위해 붙이는 키워드이다.
★클래스 정의부에 static멤버 필드가 있다면 모든 클래스에서 이 변수를 공유할 수 있게 된다.
★프로그램이 시작될때 클래스 정보는 class영역에 로드 되고, 인스턴스가 만들어질때 멤버필드는 Garbage Collection heap에만들어지고, stack영역에 인스턴스가 만들어진다. 그러나 static변수는 class영역에 바로 만들어 지기때문에 인스턴스 없이도 접근이 가능한 것. 인스턴스를 몇개를 만들어도 static변수의 갯수는 불변이다.
★static변수는 클래스이름으로 접근 가능
int staticValue = Test.a;
★static은 static끼리, 인스턴스는 인스턴스끼리 노는게 일반적이므로 static함수는 static변수만을 다룰수 있다. static들은 일반적인 멤버들 보다 빠르게 생성되므로 인스턴스 멤버의 사용을 정의할 수 없기 때문
★java프로그램이 실행될때 main메소드를 실행해야 하고, 이 메소드는 static으로 선언되어 있다. main()이라고 어디선가 직접 호출하지 않기에 프로그램 실행전에 이미 메모리에 올라와있어야 하고, static이 아니라면 누군가가 호출하지 않는 이상 실행되지 않는다. 같은이유로 main메소드는 어느 클래스에 있던 상관이 없다