final
키워드는 이름 그대로 끝! 이라는 뜻이다 (키워드가 붙으면 더는 값을 변경할 수 없다)
변수, 클래스 메서드 등에 붙을 수 있다
지역변수에 final로 값을 초기화 한 경우 이미 값이 할당되었기 때문에 더이상 값을 할당할 수 없다. 매개변수에 final이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없다
final로 필드에서 초기화하면 이미 값이 설정되었기 때문에 생성자를 통해서도 초기화할수 없다
static final : final + 필드 초기화를 사용하는 경우 static을 붙여서 사용하는 것이 효과적이다
상수(Constant)
상수는 변하지 않고, 항상 일정한 값을 갖는 수를 말한다
자바에서는 보통 단 하나만 존재하는 변하지 않는 고정된 값을 상수라 한다
⇒ 상수는 static final 키워드를 사용한다
대문자를 사용하고 구분은 _ (언더스코어)로 한다. (관례) 일반적인 변수와 상수를 구분하기 위해.
필드에 직접 접근해서 사용한다. 상수는 기능이 아니라 고정 된 값 자체를 사용하는 것이 목적.
상수는 값을 변경할수 없다 = 필드에 직접 접근해도 데이터가 변하는 문제 발생 x
final 변수와 참조
final 을 기본형 변수에 사용하면 값을 변경할 수 없다. final 을 참조형 변수에 사용하면 참조값을 변경할 수 없다.
package final1;
public class Data {
public int value;
}
package final1;
public class FinalRefMain {
public static void main(String[] args) {
final Data data = new Data(); //data = new Data(); //final 변경 불가 컴파일 오류
//참조 대상의 값은 변경 가능
data.value = 10;
System.out.println(data.value);
data.value = 20;
System.out.println(data.value);
}
}
참조 대상의 객체 값은 변경할 수 있다
data.value = 10 data.value = 20