메소드가 저장되는 공간(프로그램 시작~종료)
Garbage Collection 관여 x → static 남발하면 시스템 성능에 악영향 줄 수 있음
클래스 변수(정적 변수, 생성자, 메소드, 멤버 변수, 전역변수 등)
//Run 시작도 전에 메모리를 가지고 있는 애
정적변수 사용 EX1)
class Number{
static int num = 0; //클래스 필드
int num2 = 0; //인스턴스 필드
}
public class Static_ex {
public static void main(String[] args) {
Number number1 = new Number(); //첫번째 number
Number number2 = new Number(); //두번째 number
number1.num++; //클래스 필드 num을 1증가시킴
number1.num2++; //인스턴스 필드 num을 1증가시킴
System.out.println(number2.num); //두번째 number의 클래스 필드 출력 //1
System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력 //0
}
}
정적 메서드 사용 EX1)
class Name{
static void print() { //클래스 메소드
System.out.println("내 이름은 홍길동입니다.");
}
void print2() { //인스턴스 메소드
System.out.println("내 이름은 이순신입니다.");
}
}
public class Static_ex {
public static void main(String[] args) {
Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성하여야만 호출이 가능
}
}
new 연산자에 의해 동적으로 할당하고 저장되는 공간
Stack에 존재하는 다른 메소드에 의해 참조될 수 있다. 참조 변수 사라지면 Garbage Collection이 자동으로 해제