final 필드
초기값이 저장되면 이것이 최종값이 되어 프로그램 실행 도중에 수정할 수 없다.
final 타입 필드 [ = 초기값];
final 필드의 초기값을 줄 수 있는 방법은 1. 필드 선언 시 2. 생성자에서(복잡한 초기화 코드 혹은 객체 생성 시 외부 데이터로 초기화) 두 가지이다.
만약 초기화되지 않은 final이 남아있으면 컴파일 에러가 발생한다.
객체마다 저장되고, 생성자의 매개값을 통해서 초기값이 여러 가지 값을 가질 수 있다.
package p4;
public class Person {
final String nation = "Korea";
final String ssn;
String name;
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
void method() {
/*nation = "usa"; //당연하게 같은 클래스 내에서도 불가.
ssn = "998";*/
name = "김연아";
}
}
==========================================
package p4;
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";
// p1.ssn = "654321-7654321";
p1.name = "을지문덕";
}
}
상수(Static final)
변하지 않는 수, static final로 불변의 값을 캡슐화한 것
ex. 은행 대출 - 금리: 1~6 0.014 7~12 0.0157 → 금리를 상수에 저장한다.
final 필드와는 달리, 불변의 값 상수는 객체마다 저장할 필요가 없는 공용성을 띠고 있으며 여러가지 값으로 초기화될 수 없다.
객체마다 저장되지 않고, 클래스에만 포함된다. 한 번 초기값이 저장되면 변경할 수 없다.
static final의 초기값을 주는 방법은 1.필드선언 시 2.정적블록 두 가지이다.
static final 타입 상수; //상수 이름은 대문자 여러 단어라면 _로 연결한다.
static {
상수 = 초기값;
}
오류 예시
package p5;
public class Earth {
final static double EARTH_RADIUS = 6400; //fianl과 static위치는 바뀌어도 상관없음
static final double EARTH_SURFACE_AREA; //상수화. 값도 안넣었는데 상수처리하니까 에러
void mm() {
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
} //상수화부터 하고 값을 바꿀 수 없음
}
에러 수정
package p5;
public class Earth {
final static double EARTH_RADIUS = 6400;
static final double EARTH_SURFACE_AREA;
static {
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
}
=================================
package p5;
import java.util.Calendar;
public class EarthExample {
public static void main(String[] args) {
System.out.println("지구의 반지름: " + Earth.EARTH_RADIUS + " km");
System.out.println("지구의 표면적: " + Earth.EARTH_SURFACE_AREA + " km^2");
Calendar.getInstance();
System.out.println(Calendar.YEAR); //YEAR 상수처리되어있음
System.out.println(Calendar.AM_PM);
}
}
'Java > Study' 카테고리의 다른 글
Ch7 상속 (0) | 2021.03.09 |
---|---|
Ch6 - 패키지, 접근제한자 (0) | 2021.03.05 |
Ch6 클래스 - 정적 멤버와 Static (0) | 2021.03.04 |
Ch6 객체지향프로그래밍 - 메소드 (0) | 2021.03.04 |
Ch6 객체지향프로그래밍 - 필드, 생성자 (0) | 2021.03.02 |