Java의 final 키워드 사용법 요약
final에 의해 수식된 클래스는 계승될 수 없기 때문에final류의 구성원 방법도 덮어쓸 수 없고final키워드에 의해 수식된 클래스는 하위 클래스가 없기 때문에 클래스의 실현 디테일도 바꿀 수 없고 확장될 수 없습니다.final 클래스의 모든 구성원 방법은 은밀하게final 방법으로 지정되고,final 클래스의 구성원 변수는 필요에 따라final로 설정할 수 있습니다.
2. final 수식 방법
하나의 클래스 중의 방법은final 키워드에 의해 수식되면 그 하위 클래스는 이 방법을 덮어쓸 수 없고 이불류만 계승할 수 있다.만약에 부류 중의 어떤 방법이 부류에 의해 덮어쓰기를 원하지 않는다면 이 방법을final 유형으로 정의할 수 있다. 또한 부류 중의 개인적인 방법(즉private 키워드에 의해 수식되는 방법)도 이불류에 의해 덮어쓰기를 허용하지 않기 때문에 부류 중private 키워드에 의해 수식되는 방법묵은final 유형을final 키워드에 의해 수식되는 방법은 다음과 같은 특징이 있다고 생각한다.
이 방법은 어떤 계승류가 그 의미를 수정하고 실현하는 것을 방지할 수 있도록 잠겨 있다.
효율성컴파일러는final 방법을 호출할 때 내장 메커니즘으로 들어가 실행 효율을 크게 높인다.
또한final 수식의 정적 방법을 사용하여 소속 클래스의 하위 클래스에 숨길 수 없음(hide).
3. final 수식 변수
final이라는 키워드의 의미는'바꿀 수 없는 것'또는'종태적'이다.
그렇다면 왜 변화를 막아야 하는가?
java 언어의 발명자는 두 가지 목적으로 인해 변화를 막을 수 있습니다.
A. 효율성 문제:
jdk의 일부 방법은 사용자에게 덮어쓰는 것을 허용하지 않습니다. 디자이너는 사용하는 방법이 가장 좋은 방법이라고 생각할 수 있습니다.
사용자가 직접 덮어쓰거나 부주의로 덮어쓰면 JVM이나 시스템의 계능에 영향을 미친다.
B. 설계에 필요한 사항:
모두가 알다시피 어떤 경우는final 키워드를 사용해야 한다. 예를 들어 방법 중의 익명 내부 클래스의 매개 변수 전달을 사용해야 한다.
final 변수는 값을 부여한 후에 변하지 않는다고 하는데,
그럼 이게 변하지 않는 게 도대체 뭘까요?
이 불변은 인용을 가리키며, 주소이며, 인용된 대상의 내용은 여전히 가변적이다.
즉, 이final 변수는 영원히 어떤 대상을 가리키는 상량 바늘이지 상량을 가리키는 바늘이 아니다.
(1)final 키워드에 의해 수식된 기본 데이터 형식은 초기화된 후에 그 수치를 변경할 수 없습니다.
(2) 인용 유형의 변수는 초기화된 후에 다른 대상을 가리킬 수 없지만 인용이 가리키는 대상의 내용은 변경될 수 있다.이유는 데이터 형식을 인용하여 저장된 인용 대상이 메모리에 있는 주소,final 인용 형식을 수식한 후에 인용이 가리키는 메모리 공간 (또는 인용이 저장된 메모리 주소) 을 바꿀 수 없기 때문이다.
final 수식 클래스의 비정적 구성원 변수를 사용할 때 구성원 변수의 초기화는 두 가지 방식이 있습니다.
(3) 선언 시 초기화
(4) 변수를 설명할 때 초기화하지 않아도 된다. 이 변수는blankfinal, 즉final 공백이라고 불리지만 이 변수가 있는 클래스의 모든 구조 방법에서 이 변수에 초기값을 부여해야 한다.
final 수식 클래스의 정적 구성원 변수를 사용할 때 정적 구성원 변수의 초기화 방식도 두 가지가 있다.
(5) 선언 시 초기화
(6) 정적 초기화 블록에서 초기화
final로 인터페이스의 정적 변수를 수정할 때 초기화 방식은 다음과 같습니다.
(7) 선언 시 초기화
final로 국부 구성원 변수를 수식할 때, 사용하기 전에 값을 초기화하기만 하면 된다.
한 마디로 하면final 키워드로 수식된 변수는 성명할 때 초기화하지 않을 수 있지만, 이 변수는 사용하기 전에 초기화되어야 하며, 일단 초기화되면 다시 부여될 수 없다.프로그램의 출력 결과를 분석해 보겠습니다.
public class Test {
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));
System.out.println((a == e));
}
}
4. final 손질 매개 변수방법 매개 변수가final 형식일 때, 이 매개 변수를 사용할 수 있지만, 이 매개 변수의 값을 바꿀 수 없습니다.이 변수는 방법이 호출될 때 생성되며, 대응하는 실참값으로 초기화되며, 방법체 (body) 실행이 끝날 때까지 그 값을 바꿀 수 없습니다.final 키워드로 수식된 기본 데이터 형식의 매개 변수는 변수를 변경할 수 없습니다.final 키워드로 수식된 인용 데이터 형식은 이 인용이 다른 대상을 가리키거나 다시 값을 null로 부여할 수 없지만 이 인용으로 인용 대상의 내용을 변경할 수 있습니다.final이 매개 변수를 수식하는 목적은 호출된 방법 내부에서 매개 변수에 대한 조작 변경 방법 외부에서 대응하는 변수의 값을 방지하는 것이 아니라 이 방법 내에서 이 매개 변수에 대한 재부여 조작을 방지하고 이 매개 변수가 전달될 때의 초기 값에 영향을 주는 것이다.그리고 방법의 매개 변수를final 키워드로 수식하면 방법 외부에서 전달된 매개 변수의 값이 바뀌지 않도록 방지할 수 없습니다.구체적으로final 수식 인용 데이터 형식의 해석을 참고할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.