final은 값을 최초 초기화 할때만 지정할 수 있고 그 이후에 변경할 수 없다.
final을 지역 변수에 설정할 셩우 최초 한번만 할당할 수 있다. 이후 변수의 값을 변경하면 컴파일 오류가 발생한다.
매개변수에 final이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없다. 따라서 호출 시점에 사용된 값이 끝까지 사용된다.
final을 필드에 사용할 경우 해당 필드는 생성자를 통해서 한번만 초기화 될 수 있다. (초기값이 없을경우)
생성자를 통해서 final필드를 초기화 하는 경우, 각 인스턴스 마다 final 필드에 다른 값을 할당 할 수 있다. (물론 final을 사용했기 때문에 이후 변경은 불가능)
final 필드를 필드에서 초기화 하는 경우, 모든 인스턴스가 같은 값을 가진다.
생성자 초기화와는 다르게 필드 초기화는 해당 값이 미리 정해져있기 때문이다.
모든 인스턴스가 같은 값을 사용하기 때문에 결과적으로 메모리를 낭비하게 된다, 또 같은 값이 계속 생성되는것은 명확한 중복 현상이다. 이럴 때 static을 사용한다.
자바에서는 static 과 final 두개가 붙은 변수를 상수라고 한다.
상수의 경우 전부 대문자로 생성한다.(관례)
static 영역은 단 하나에만 존재하는 영역이다. 앞서 설명한 중복과 메모리 비효율 문제를 해결할 수 있다.
이런 이유로 필드에 final + 필드 초기화를 사용하는 경우 static을 붙여서 사용하는 것이 효과적이다.
static final int CONST_VALUE = 10;