final 변수 초기화

김민지·2023년 1월 10일
0

자바

목록 보기
18/21

ArrayList의 add 코드를 살펴보던 도중 final변수의 선언과 초기화가 분리되어있는것을 발견하였다

초기화와 선언이 분리되는 경우

final변수는 언제 초기화와 선언이 분리될까?

  • class의 멤버변수로 final이있다면 부모 생성자 생성 후 ~ 해당 클래스 생성자 생성 전에 초기화 된다

예제

class Judy {

	Nick nick;
    	final String message = nick.say(); // nick이 null값으로 error가 발생한다

	Judy(Nick nick) {
    		this.nick = nick; 
  	}
    
}
  • 생성자의 인자로 받은 값을 가져와서 final로 선언하려함
  • 생성자 호출 전에 초기화가 되기때문에 error

생성자에서 초기화 가능

class Judy {
	final String message;

	Judy(String msg) {
    		this.message = msg; //선언-초기화 분리는 가능
  	}
    
}

final method, final class

  • final class: 해당 class는 상속불가
  • final method: 오버라이딩 금지

method에 final 선언

public void func(){
	final int s1=2;
    final int s2;
    s2 = 3;//변경불가
}
  • 둘다 가능하다

정리

  • final이 class내의 멤버변수일경우
    생성자에서 초기화하거나 선언과동시에 초기화하거나 둘중하나의 방법으로 초기화를 진행해야한다 그런데 final변수가 지역변수인경우 선언과 초기화를 분리하는것이 가능하다

출처
https://velog.io/@titu/JAVA-final-%EB%B3%80%EC%88%98%EC%9D%98-%EC%B4%88%EA%B8%B0%ED%99%94-%EC%8B%9C%EC%A0%90%EA%B3%BC-%EC%83%9D%EC%84%B1%EC%9E%90

profile
안녕하세요!

0개의 댓글