1. final필드
최종적인 값을 갖고 있는 멤버 변수
= 값을 변경할 수 없다.
class앞에 붙으면 더 이상 확장 되지 않는다. 상속불가.
- final의 초기화 방법
멤버 변수 선언시,
생성자에서 단 한번 초기화
2. 상수
static final
객체 마다 가지는 불변의 정적 필드
- 이름은 전부 대문자로 작성
다른 단어가 결합되면 _으로 연결
(예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package sec02_exam_final;
public class Person {
//불변의 인스턴스 필드(선언과 동시에 초기화를 하거나, 혹은 생성자에서 단 한번만 초기화가 이루어진다.)
final String NATION = "KOREA"; //상수를 선언
final String SSN;
String name;
//불변의 정적 필드(메모리의 멤서드영역에 올라가므로 반드시 선언과 동시에 초기화해야함)
//역할: 공용데이터
static final int AGE = 100;
//매개변수가 있는 생성자
public Person( String sSN, String name) {
// this.NATION = nATION; 이미 초기화가 되어 있기 때문에 변경할 수 없다.
//this.NATION = "aaaa"; // nation = "KOREA"초기화를 이미 진행했다.
//this는 객체 자기 자신의 주소(참조변수와 동일)
//this는 Person이라는 인스턴스(new)가 만들어질 때 , 비로소 활성화된다.
this.SSN = sSN;
this.name = name;
//this.AGE = age;
}
}
|
cs |
Person클래스에
멤버변수로
final String NATION
final String SSN
이 왔는데 이 두개는 상수입니다. final 이므로 한번 초기화 하면 값을 못바꾸고요,
static이 안붙었기 때문에 인스턴스 필드입니다.
static final int AGE 는 불변의 정적 필드로서 선언과 동시에 바로 초기화를 해주어야합니다.
SSN은 선언시 초기화 하지않고 생성자에서 단 한번 초기화해주고 있습니다.
(실행클래스)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package sec02_exam_final;
public class PersonEx {
public static void main(String[] args) {
Person person = new Person("123456-123456", "홍길동");
// Person person2 = new Person("123456-123456", "을지문덕");
//
// person = person2; //홍길동은 쓰레기 객체가 됨.
System.out.println(person.NATION);
System.out.println(person.SSN);
System.out.println(person.name);
System.out.println();
//아래코드는 ㄴ상수는 절대로 한번만 초기화 가능하고 수정이 안된다.
//하여 예외가 발생한다.
// person.NATION = "USA";
// person.SSN = "123456-123654";
person.name = "광개토대왕";
System.out.println(person.NATION);
System.out.println(person.SSN);
System.out.println(person.name);
System.out.println(Person.AGE); //static방법으로 접근
//결론
// 1. static final : 정적 불변의 상수, 메모리 상단(클래스 영역, 메서드 영역, 정적영역)
// 에 하나만 생성이 되고 공유되는 상수이다.
// 2. final : 불변의 인스턴스 상수, 메모리의 힙에 할당이 된다. new연산자를 몇 번 외치든 간에
// 만들어진 인스턴스 만큼 생성된다.
}
}
|
cs |
Person객체를 만들어주었습니다.
매개변수로 SSN과 name이 초기화됩니다.
NATION은 위에서 Korea라고 초기화를 해주었고
SSN은 생성자에서 찍은 123456-123456 이며,
name은 홍길동입니다.
<출력결과>
728x90
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA]상속/포함관계 (0) | 2020.10.18 |
---|---|
[자바JAVA] 생성자 constructor / this()/ 생성자를 이용한 인스턴스 복사 (0) | 2020.10.11 |
[자바JAVA] 메서드 오버로딩 overloading (0) | 2020.10.10 |
[자바JAVA] 재귀호출, 팩토리얼 (0) | 2020.10.09 |
[자바JAVA] call by value & call by reference/ 값에 의한 참조 & 주소에 의한 참조 (0) | 2020.10.09 |