728x90
final 변수는 지역변수에 설정하는 경우 최초 1회만 설정이 가능
이후 변수값을 수정하려 하면 컴파일 에러 발생함
매개변수에 final이 붙으면 메소드 내부에서 매개변수의 값을 변경할 수 없다
final 지역변수
package final1;
public class FinalLocalMain {
public static void main(String[] args) {
//final 지역변수
final int data1;
data1 = 10; // 최초 1회만 할당 가능
// data2 = 20; // 컴파일 오류
//final 지역변수2
final int data2 = 10;
//data2 = 20; // 컴파일 오류
}
static void method(final int parameter){
// parameter = 20; // 컴파일 오류
}
}
final 필드(멤버변수)
final을 필드에 사용할 경우 해당 필드는 생성자를 통해 한번만 초기화 가능
package final1;
public class ConstructInit {
final int value;
public ConstructInit(int value){
this.value = value;
}
}
final 필드를 필드에서 초기화 하면 이미 값이 설정되어서 생성자를 통해서도 초기화가 불가능
package final1;
public class FinalInit {
static final int CONST_VALUE = 10;
final int value = 10;
/*
public FinalInit(int value){
this.value = value;
컴파일 에러
*/
}
}
package final1;
public class FinalFieldMain {
public static void main(String[] args) {
//final 필드 - 생성자 초기화
System.out.println("생성자 초기화");
ConstructInit constructInit1 = new ConstructInit(10);
ConstructInit constructInit2 = new ConstructInit(20);
System.out.println(constructInit1.value);
System.out.println(constructInit2.value);
//final 필드 - 필드 초기화
System.out.println("필드 초기화");
FieldInit fieldInit1 = new FieldInit();
FieldInit fieldInit2 = new FieldInit();
FieldInit fieldInit3 = new FieldInit();
System.out.println(fieldInit1.value);
System.out.println(fieldInit2.value);
System.out.println(fieldInit3.value);
//상수
System.out.println("상수");
System.out.println(FieldInit.CONST_VALUE);
}
}
---------------------------
생성자 초기화
10
20
필드 초기화
10
10
10
상수
10
final변수와 상수
● 상수 = 변하지 않는 값, 단 하나의 고정된 값
● 그래서 상수는 static final을 사용함
● 상수를 쓸 때는 대문자로 작성하고 구분은 _ 로 구분함(관례상)
● 필드를 직접 접근하여 사용함
● 상수는 런타임에는 변경이 불가능
final 변수와 참조
package final1;
public class Data {
public int value;
}
int value는 final 이 아니라서 변경이 가능하다!
package final1;
public class FinalRefMain {
public static void main(String[] args) {
final Data data = new Data();
//data = new Data(); //final 변경 불가 컴파일 오류
//참조 대상의 값은 변경 가능
data.value = 10;
System.out.println(data.value);
data.value = 20;
System.out.println(data.value);
}
}
data.value는 final이 아니기에 값 변경이 가능!
종합예시
package final1.ex;
public class Member {
private final String id; //final 키워드 사용
private String name;
public Member(String id, String name){
this.id = id;
this.name=name;
}
public void changeData(String name){
this.name = name;
}
public void print(){
System.out.println("id:"+id+", name:"+name);
}
}
package final1.ex;
public class MemberMain {
public static void main(String[] args) {
Member member = new Member("myid","kim");
member.print();
member.changeData("seo");
member.print();
}
}
728x90
'Language > JAVA' 카테고리의 다른 글
[JAVA] 다형성1 ★ (0) | 2024.03.07 |
---|---|
[JAVA] 상속★ (1) | 2024.03.05 |
[JAVA] Static (0) | 2024.03.04 |
[JAVA] 접근 제어자 (0) | 2024.03.03 |
[JAVA] 패키지 (0) | 2024.03.02 |