만일 여러 인스턴스가 공유하는 기준 값이 필요한 경우 공통적으로 사용할 수 있는 변수가 필요하다. 이럴때, static 변수를 사용하면 된다. static 변수는 인스턴스가 생성될 때 만들어지는 변수가 아니라, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당된다. 따라서 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조 가능하다.
public class Student{
public static int studentCode = 1000; // 인스턴스들이 공유하는 변수
private String name;
private int score;
public void setName(String name){
this.name = name;
}
public void setScore(int score){
this.score = score;
}
public String getName(){
return this.name;
}
public int getScore(){
return this.score;
}
}
위 클래스에서 static 변수인 studentCode 변수를 Student.studentCode;로 값을 가져올 수 있다.
위에서 static 변수인 studentCode변수를 public으로 해서 접근할 수 있는데 이 변수를 private으로 하고 getStudentCode()함수를 static 메서드로 만들어 studentCode 변수의 값을 가져올 수 있다.
public class Student{
public static int studentCode = 1000; // 인스턴스들이 공유하는 변수
private String name;
private int score;
public static int getStudentCode(){ // static method
return studentCode;
}
public void setName(String name){
this.name = name;
}
public void setScore(int score){
this.score = score;
}
public String getName(){
return this.name;
}
public int getScore(){
return this.score;
}
}
위 클래스에서 static 메서드 getStudentCode()를 호출하려면 Student.getStudentCode();로 함수를 호출할 수 있다.
static 메서드에서는 인스턴스 변수를 사용할 수 없다. static의 특성상 인스턴스 생성과 무관하게 클래스 이름으로 호출될 수 있다. 하지만 인스턴스 생성 전에 호출 될 수 있으므로 static 메서드 내부에서는 인스턴스 변수를 사용할 수 없다.