"고정된"이라는 의미
객체 생성 없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 활용한다
공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 이용한다
//선언
public class StaticInfo{
static int cv = 1;
static int sum(int x, int y) {
return x + y
}
}
//사용 : 클래스이름.필드
int a = StaticInfo.sum(1,2); // 3
int b = StaticInfo.cv + 3; // b = 4
객체 참조 변수를 이용할 수 있지만 추천하지 않음
StaticInfo c = new StaticInfo();
int d = c.sum(1,2);
인스턴스 필드나 메소드, 그리고 this 키워드를 사용할 수 없다
public class StaticInfo{
static int cv = 1;
int iv;
void method1(){}
static void method2(){}
static int method3(int x, int y){
this.iv = 10; // <-- x
this.method1(); // <-- x
iv = 10; // <-- o
method2(); // <-- o
}
}
final은 "최종적인"이라는 의미
즉, 해당 변수는 값이 저장되면 최정적인 값이 되므로, 수정이 불가능하다는 의미이다.
//final필드에 값을 저장하는 방법
public class Store{
final int closeTime = 22;
final int openTime;
public Store(int openTime){
this.openTime = openTime;
}
}
하나는 closeTime과 같이 선언과 동시에 값을 주는 방법이 있고 openTime과 같이 생성하고, 객체를 생성할 때 생성자 public Store에 의해 값을 주는 방법이 있다.
위와같이 설정하면, 오픈 시간은 객체마다 다르게, 닫는 시간은 고정되도록 설정이 가능하다
static + final = "고정된 + 최종적인"의 의미로, 상수를 선언하고자 할 때 사용된다.
상수란,fixed로 변하지 않는 값을 뜻하는데
이전 final 예시에서 볼 수 있드시 final자체 만으로는 상수를 의미할 수 없다
//선언: 관행적으로 전부 대문자로 쓴다
static final double PI = 3.141592;
| 제목 | 내용 |
|---|---|
| static | 객체마다 가질 필요가 없는 공용으로 사용하는 필드 혹은 인스턴스 필드를 포함하지 않는 메서드 |
| final | 한 번 값이 정해지고 나면 값을 바꿀 수 없는 필드 |
| static final | 모든 영역에서 고정된 값으로 사용하는 상수 |