예를 들어 Java에서 final 키워드의 사용법을 설명합니다.
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 methodfinal 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 classfinalcalss 상속 불가
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의 대상은 자손류를 인용하는 것이 아니라 효율과 안전을 보장할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.