최종 수정자:
최종 수정된 멤버 변수에는 프로그래머가 명시적으로 지정한 초기 값이 있어야 합니다.
클래스의 필드: 초기값은 정적 초기화 블록에서 지정하거나 필드를 선언할 때 지정해야 합니다.
인스턴스 필드: 필드는 비정적 초기화 블록에서 선언되어야 하거나 생성자에서 초기 값을 지정해야 합니다.
최종 지역 변수: 프로그래머가 명시적으로 초기화해야 합니다.
최종 수정된 기본 변수와 참조 유형 변수의 차이점은 무엇입니까?
final로 수정된 기본 변수: 기본 변수는 재할당될 수 없습니다.
최종 수정된 참조 변수: 이 참조 유형이 참조하는 주소는 변경되지 않는다는 것만 보장됩니다. 즉, 항상 동일한 개체를 참조하지만 이 개체는 완전히 변경될 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
/**
*/
import java.util.*;
공개 수업 데모5
{
공개 정적 무효 메인(문자열[] 인수)
{
최종 B b = 새로운 B(22);
b.테스트();
// 합법적으로 값을 변경하지만 여전히 동일한 참조를 가리킵니다.
b.setAge(20);
System.out.println(b.getAge());
// 불법적인
// b = 널;
b.test2();
}
}
/**
fianl은 멤버 변수를 수정합니다.
*/
클래스 A
{
//정당한
최종 정수 a = 10;
//생성자 또는 초기화 블록에 초기값을 지정합니다.
최종 문자열 str;
최종 정수 c;
최종 정적 이중 d;
{
str = "안녕하세요";
//불법적인
// a = 100;
}
공전
{
d = 100;
}
// 생성자는 초기화 블록에 지정되지 않은 필드에 대해 초기 값을 지정할 수 있습니다.
공개A()
{
// 불법적인
// str = "ddd";
c = 1000;
}
공개 이중창최종()
{
// 일반 메소드에서는 final의 초기값을 지정할 수 없습니다.
// d = 1000.90을 반환합니다.
0을 반환합니다.
}
}
/**
fianl은 배열 객체를 수정합니다.
*/
클래스 B
{
비공개 연령;
공개B()
{
}
공개 B(int age)
{
this.나이 = 나이;
}
공개 무효 setAge(int age)
{
this.나이 = 나이;
}
공개 int getAge()
{
이 나이를 반환;
}
공개 무효 테스트()
{
최종 int[] arr={23,434,56,898};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr[2] = 200;
System.out.println(Arrays.toString(arr));
//다음 Arr 재할당은 불법입니다.
// 도착 = null;
}
/**
최종에 대한 이해를 심화
*/
공개 무효 test2()
{
String str1 = "더 나은 미래";
//상수 풀의 "Better Future"에 대한 직접 참조
String str2 = "아름다운"+"미래";
//진실
System.out.println(str1 == str2);
문자열 s1 = "아름답다";
문자열 s2 = "미래";
문자열 s3 = s1+s2;
//false s1 s2는 컴파일 타임에 결정될 수 없는 변수일 뿐입니다.
//컴파일 타임에 결정하려면 final을 사용하여 s1 s2를 수정하세요.
System.out.println(str1 == s3);
}
}
Java의 final 수정자에 대해 알고 계시나요? 댓글에서 명확하게 설명되었으므로 여기서는 자세히 설명하지 않겠습니다.