1. 최종 변수
최종 변수는 초기화되면 변경할 수없는 상수입니다.
클래스 test1 {Final Double Pi = 3.14; // 상수의 이름은 최고의 대문자 공개 test1 () {pi = 3.14; } void test () {system.out.println ( "pi is :" + pi); } public static void main (String [] args) {test1 t = new test1 (); t.test (); }} 산출:
PI IS : 3.14
(1) 빈 최종 변수
선언 당시 초기화되지 않은 최종 변수를 빈 최종 변수라고합니다. 빈 최종 변수는 생성자에서 초기화되어야합니다. 그렇지 않으면 컴파일 오류가 발생합니다.
클래스 test1 {최종 이중 pi; test1 () {pi = 3.14; // 생성자에서 초기화} void test () {System.out.println ( "pi is :" + pi); } public static void main (String [] args) {test1 t = new test1 (); t.test (); }} 산출:
PI IS : 3.14
(2) 초기화되지 않은 정적 최종 변수
선언 단계에서 초기화되지 않은 정적 최종 변수는 정적 코드 블록에서만 초기화 될 수 있습니다.
클래스 test1 {정적 최종 이중 pi; 정적 {pi = 3.14; } void test () {system.out.println ( "pi is :" + pi); } public static void main (String [] args) {test1 t = new test1 (); t.test (); }} 산출:
PI IS : 3.14
2. 최종 방법
최종 방법을 덮어 쓸 수 없습니다. 즉, 서브 클래스는 부모 클래스의 Fianl 메소드를 호출 할 수 있지만이를 덮어 쓸 수는 없습니다.
클래스 테스트 {정적 최종 이중 pi = 3.14; 최종 void test () {system.out.println ( "pi is :" + pi); }} class test1은 test {public static void main (String [] args) {test1 t = new test1 (); t.test (); }} 산출:
PI IS : 3.14
3. 최종 수업
최종 CAL은 상속받을 수 없습니다
최종 클래스 test1 {정적 최종 이중 pi = 3.14; 최종 void test () {system.out.println ( "pi is :" + pi); } public static void main (String [] args) {test1 t = new test1 (); t.test (); }} 산출:
PI IS : 3.14
추신 : Java.Lang.String 클래스가 왜 최종으로 설계됩니까?
우선, 당신은 키워드 결승에 대해 명확해야합니다.
Final은 변경하고 싶지 않은 것으로 보이지만 변경하고 싶지 않은 두 가지 이유는 설계 또는 효율성이 있습니다. Final이 수정 한 클래스는 상속 될 수 없으므로 Final으로 수정 된 클래스는 변조 할 수 없습니다.
이것을 이해 한 후에는 문제를 살펴 보겠습니다.
(1) 설계 관점에서
A. 서브 클래스에서 의미론을 바꾸지 않도록하십시오. 문자열 클래스는 최종 클래스이므로 아무도 문자열의 서브 클래스를 정의 할 수 없습니다. 다시 말해, 문자열 참조가있는 경우 문자열 객체를 참조해야하지만 다른 클래스의 객체가 될 수는 없습니다.
B. Java 디자이너가 문자열을 공유하기 때문에 문자열을 생성 한 후에는 수정할 수 없습니다. 다음 단락은 소스 코드의 주석입니다.
(2) 효율성의 관점에서 :
A. 최종적으로 설계된 JVM은 가상 기능 테이블에서 관련 메소드를 쿼리 할 필요가 없지만 문자열 클래스의 관련 메소드에서 직접 찾아 실행 효율을 향상시킵니다.
B. Java 디자이너는 공유가 더 많은 효율성을 가져다 준다고 생각합니다.
요컨대, Java.lang.string이 언급 한 객체가 효율성과 안전을 보장하기 위해 자손을 참조하는 클래스가 아니라 java.lang.string의 대상이어야합니다.