static int serialNum;
static int serialNum = 10000;

프로그램이 메모리에 load 될때 데이터 영역 메모리에 생성됨 ex) 상수, 리터럴, static
System.out.println(staticStudent1.getSerialNum());
// static 변수는 인스턴스보다는 클래스로 직접 참조
System.out.println(StaticStudent.getSerialNum());
👉🏻 인스턴스의 생성과는 관계없이 클래스의 이름으로 직접 참조함
public class StaticStudent {
// static int serialNum = 10000;
// 외부에서 변경을 막기 위해서 private 로 선언
private static int serialNum = 10000;
int studentId;
int studentName;
// 자동으로 학생 id를 1씩 증가시켜서 채번
public StaticStudent(){
// 같이 공유 되어서 증가될 것이며
serialNum ++;
// 각 인스턴스는 각각의 id를 할당받아 사용
studentId = serialNum;
}
...

데이터 영역 : static, 리터럴, 상수
스택 메모리 : 지역 변수
힙 메모리 : 인스턴스가 생성될때 마다 사용
public class StaticStudent {
...
public static int getSerialNum(){
// 지역 변수 O -> 메서드 호출 시 생성 ~ 호출 시 종료
int i = 0;
i ++;
System.out.println(i);
// 인스턴스(멤버) 변수 X -> 인스턴스 생성되었을때
// 인스턴스 변수는 꼭 인스턴스가 생성되어야 하므로
// static 메서드에서는 생성이 불확실한 인스턴스 변수 사용 불가능
// studentName = "로로";
return serialNum; // static 변수, 클래스 변수
}
}
