final 제어자
- 최종적인 값을 갖고 있는 필드 = 값을 변경할 수 없는 필드
public class Person{
final String nation = "Korea";
final String ssn; //아래에있는 메소드가 없어지면 오류발생
String name;
public Person(String ssn, String name){
// 아래 두줄은 위에 nation을 선언해준것과 같은 기능을 해준다.
this.ssn = ssn;
this.name = name;
}
}
- 생성자는 final 필드의 최종 초기화를 마쳐야 하는데, 만약 초기화되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 발생한다.
- final 필드의 초기값을 줄 수 있는 방법 2가지
- 필드 선언시에 주는 것이 제일 간단
- 생성자로 선언해주는 방법 ( 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화해야 한다면 생성자에서 초기값을 지정해줘야 한다.)
class Name{
static void print() { //클래스 메소드
System.out.println("내 이름은 홍길동입니다.");
}
void print2() { //인스턴스 메소드
System.out.println("내 이름은 이순신입니다.");
}
}
public class Static_ex {
public static void main(String[] args) {
Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성하여야만 호출이 가능
}
}
상수
- 불변의 값 상수는 객체마다 저장할 필요가 없는 고용성을 띠고 있으며 여러가지 값으로 초기화될 수 없다.
- final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러가지 값을 가질 수 있기때문에 상수가 될 수 없다.
- static final
public class Earth{
static final double EARTH_RADIUS=6400;
static final double EARTH_SURFACE_AREA;
static{ //static에서 선언
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
}
댓글