본문 바로가기
Java/공부

[Java] final 키워드

by MPerformance 2020. 5. 2.

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

댓글