예를 들어 Java에서 final 키워드의 사용법을 설명합니다.

3078 단어 Javafinal
1. final variable
final variable은 초기화되면 바꿀 수 없는 상수입니다.

class Test1 {
 final double PI = 3.14; // 

 public 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)Blank final variable
설명할 때 초기화되지 않은finalvariable은blankfinalvariable라고 불리며,blankfinalvariable는 구조 함수에서 초기화되어야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.

class Test1 {
 final double 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)Uninitialized static final variable
성명 단계에서 초기화되지 않은staticfinalvariable는 정적 코드 블록에서만 초기화됩니다

class Test1 {
 static final double PI;

 static {
 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. final method
final method는 덮어쓸 수 없습니다.즉, 하위 클래스는 부모 클래스의fianl method를 호출할 수 있지만, 덮어쓸 수 없습니다.

class Test {
 static final double PI = 3.14;

  final void test(){
   System.out.println("PI is: " + PI);
  }
}

class Test1 extends Test{

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

출력:

PI is: 3.14
3. final class
finalcalss 상속 불가

final class Test1 {
 static final double PI = 3.14;

  final void test(){
   System.out.println("PI is: " + PI);
  }

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

출력:

PI is: 3.14
PS:java.lang. String 클래스는 왜 final로 설계되었습니까?
우선,final이라는 키워드를 잘 알아야 한다.
final의 출현은 변화를 원하지 않기 위해 변화를 원하지 않는 이유는 두 가지가 있는데 그것이 바로 디자인이나 효율이다.final 수식의 클래스는 계승될 수 없기 때문에final 수식의 클래스는 변경될 수 없습니다.
이 점을 알고 나서 우리는 다시 문제를 보았다.
(1) 디자인상
A. 하위 클래스에서 의미를 변경하지 않도록 합니다.String 클래스는final 클래스입니다. 이것은 아무도 String의 하위 클래스를 정의할 수 없다는 것을 의미합니다.다시 말하면, 만약 String의 인용이 있다면, 그것은 반드시 String 대상이 될 것이며, 다른 종류의 대상이 될 수 없다.
B, String이 생성되면 수정할 수 없습니다. 자바 디자이너가 String을 공유할 수 있도록 하기 때문에 다음 섹션은 원본 코드의 주석입니다.
(2) 효율성:
A.final로 설계해야 JVM은 관련 방법에 대해 허함수표에서 조회하지 않고 String류의 관련 방법에 직접 포지셔닝하여 집행 효율을 높인다.
B. Java 디자이너는 공유가 더 효율적이라고 생각합니다.
요컨대 자바를 보증해야 한다.lang.String에서 인용한 대상은 틀림없이java입니다.lang. String의 대상은 자손류를 인용하는 것이 아니라 효율과 안전을 보장할 수 있습니다.

좋은 웹페이지 즐겨찾기