final 키워드
final이 가지는 사전적 의미는 최종적인 이다.
값을 변경할 수 없지만(메모리 위치가 변경되지 않는다) 최초 선언시 값을 초기화 시킬 수 있다.
final 키워드를 변수, 매개변수, 메소드, 클래스, 상수(static final) 에 사용할 수 있는데
변수에 선언시
2가지의 방법을 통해 수정이 가능하다.
- 1. final 변수 선언 시
- 2. 생성자를 통해
public class Member {
final String nation = "Korea"; // 변수 초기값 지정
final String id;
final String age;
public Member (String id, String age) { // 생성자를 통해 초기값 지정
this.id = id;
this.age = age;
}
}
메소드에 선언 시
오버라이딩(자식객체가 재정의) 할 수 없다.
public class Parent {
public void start() {
System.out.println("시작합니다.");
}
public final void end() { //자식 객체가 재정의 불가능
System.out.println("끝입니다.");
}
}
-----------------------------------------------------------------------------------------------
public class Child extends Parent {
@Override
public void start() { //부모의 start() 메소드를 재정의 가능
System.out.println("게임을 ");
super.start();
}
//final로 선언된 부모의 end() 메소드 재정의 불가능
}
클래스에 선언 시
하위(자식) 클래스를 정의할 수 없다.
public final class String { }
public class newString extends String { // String 클래스를 확장할 수 없다 에러 발생
}
상수(static final)
static 키워드가 붙어있기 때문에 객체마다 가지고 있지 않고
JVM의 메모리 영역인 Method Area에 클래스별로 관리 되므로 공용 데이터로서 사용 가능
역시 값은 바꿀 수 없지만 2가지의 초기화 방법이 존재 한다.
- static final 변수 선언시
- static { } 블록 사용시
static final String MEMBER_NAME = "홍길동";
static final double EARTH_RADIUS = 6400;
static final double EARTH_SURFACE_AREA;
static { //복잡한 식을 통해 초기값을 부여해야 할 경우
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
'Java > 공부' 카테고리의 다른 글
[Java] String, StringBuffer, StringBuilder의 차이점 (0) | 2020.05.02 |
---|
댓글