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