- 초기값이 저장되면 최종값이 되어 프로그램 실행 도중 수정 불가
1) final 필드의 초기값 주는 방법
- 단순 값일 경우 필드 선언 시 초기화(주로 정적 필드(상수)일 경우)
- 객체 생성 시 외부 데이터로 초기화 필요한 경우 생성자에서 초기화(주로 인스턴스 필드일 때)
2) 인스턴스 final 필드
- 객체에 한번 초기화된 데이터를 변경 불가로 만들경우 ex) 주민 번호
- final 타입 필드 [= 초기값];
- final 필드의 초기값을 줄 수 있는 방법 2개
1. 필드 선언 시에 주는 방법
2. 생성자에서 주는 방법
public class Person {
final String nation = "Korea";
final String ssn;
String name;
//생성자
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
public class PersonExample {
public static void main(String[] args) {
Person p1 = new Person("123456-1234567", "홍길동");
System.out.println(p1.nation);
System.out.println(p1.ssn);
System.out.println(p1.name);
//p1.nation = "usa"; final 해줘서 변경할 수 없음
//p1.ssn = "홍삼원"; final 해줘서 변경할 수 없음
p1.name = "홍삼원";
System.out.println(p1.name);
}
}
3) 정적 final 필드 (관례적으로 모두 대문자로 작성)
- 일반적으로 불변의 값을 상수(static final)이라고 함 즉, 상수는 static 이면서 final이어야 상수라고 한다.
→한 번 초기값이 저장되면 변경할 수 없다.
- ( _ ) : 이거는 상수에만 붙여라
public class Earth {
static final double PI = 3.14159;
static final double EARTH_RADIUS = 6400;
static final double EARTH_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
public class EarthExample {
public static void main(String[] args) {
System.out.println("지구의 반지름: " + Earth.EARTH_RADIUS + " km");
System.out.println("지구의 표면적: " + Earth.EARTH_AREA + " km^2");
}
}