반응형
250x250
Notice
Recent Posts
Recent Comments
Link
이롭게 현명하게
[JAVA] 자바 final 필드와 상수 본문
728x90
반응형
목차
final 필드
상수(static final)
<정리>
final 클래스 - 클래스 상속 불가
final 메소드 - 오버라이딩 불가
[final 필드(객체별 상수), static final 필드(클래스별 상수)]
- 상수
- static final 필드는 클래스 선언 시에 초기 값을 지정
- 일반 final 필드는 주로 생성자에서 초기 값을 선언
[final 필드]
final 필드 : 최종적인 필드. 즉 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다.
final 데이터타입 필드명 = 초기값;
<final 필드의 초기값>
1. 필드 선언시선언 시 주는 방법 : 단순 선언 시
2. 생성자에서 주는 방법 : 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화해야 할 때
생성자에 초기화되지 않은 final 필드가 있을 경우 : 컴파일 에러 발생
// Person.java
public class Person {
final String nation = "Korea";
final String ssn;
String name;
public Person(String ssn,String name) {
this.ssn = ssn;
this.name = name;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Person p1 = new Person("123456-1234567","김박이");
System.out.println(p1.ssn);
System.out.println(p1.nation);
System.out.println(p1.name);
p1.nation = "USA ";//final 필드 수정 불가
p1.name="박김이";
}
}
[상수(static final)]
상수 : 불변의 값 (ex. 원주율 파이(π))
final 필드를 상수라고 부르지 않는 이유 : 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러 가지 값으로 초기화 될 수 없기 때문이다.
final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러가지 값을 가질 수 있기 때문에 상수가 될 수 없다.
상수는 static 이면서 final 이여야 한다.
static final 필드는 객체마다 저장되지 않고, 클래스에만 포함된다. 그리고 초기값이 저장되면 변경할 수 없다.
static final 데이터타입 상수명 = 초기값;
static final 데이터타입 상수;
static {
상수 = 초기값;
}
// Earth.java
public class Earth {
static final double EARTH_RADIUS = 6400;
static final double EARTH_SURFACE_AREA;
static final double PI = 3.14;
static {
EARTH_SURFACE_AREA = 4*PI*EARTH_RADIUS*EARTH_RADIUS;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("지구의 반지름 : "+Earth.EARTH_RADIUS+"km");
System.out.println("지구의 표면적 : "+Earth.EARTH_SURFACE_AREA+"km^2");
}
}
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
더보기
[ 참고자료 ]
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 자바 접근 제한자 (0) | 2023.04.25 |
---|---|
[JAVA] 자바 패키지 (0) | 2023.04.24 |
[JAVA] 자바 정적 멤버와 static (0) | 2023.04.20 |
[JAVA] 자바 인스턴스 멤버와 this (0) | 2023.04.19 |
[JAVA] 자바 클래스 메소드 (0) | 2023.04.18 |
Comments