자바 키워드 final
어떤 종류의 전체 가 final 이 라 고 정의 할 때,당신 은 이 종 류 를 계승 할 계획 이 없고,다른 사람 이 이렇게 하 는 것 도 허락 하지 않 는 다 는 것 을 나타 낸다.즉,이런 종 류 는 하위 클래스 가 있어 서 는 안 된다 는 것 이다.
메모:final 클래스 의 모든 방법 은 final 입 니 다.덮어 쓸 수 없 기 때문에 final 클래스 에 final 키 워드 를 추가 하 는 것 은 의미 가 없습니다.
3.final 수식 방법
클래스 의 모든 private 방법 은 final 로 암시 적 으로 지정 되 어 있 으 며,private 방법 을 사용 할 수 없 기 때문에 덮어 쓸 수 없습니다.private 방법 에 final 키 워드 를 추가 할 수 있 지만 이렇게 하 는 것 은 좋 을 것 이 없다.
public class Base {
private void test() {
}
}
public class Son extends Base{
public void test() {
}
public static void main(String[] args) {
Son son = new Son();
Base father = son;
//father.test();
}
}
Base 와 Son 은 모두 방법 test()가 있 습 니 다.그러나 이것 은 덮어 쓰 는 것 이 아 닙 니 다.private 가 수식 하 는 방법 은 암시 적 인 final 이기 때문에 계승 할 수 없 기 때문에 덮어 쓰 는 것 은 말 할 필요 도 없습니다.Son 에서 test()방법 은 Son 의 새로운 구성원 에 불과 합 니 다.Son 이 위로 전환 하여 father 를 얻 었 지만 father.test()는 실행 할 수 없습니다.Base 의 test 방법 은 private 이기 때문에 접근 할 수 없습니다.4.final 방법 은 무 거 운 짐 을 실 을 수 있 습 니 다.
우 리 는 아버지 류 의 final 방법 이 자식 류 에 의 해 다시 쓸 수 없다 는 것 을 알 고 있 습 니 다.그러면 final 방법 은 다시 실 릴 수 있 습 니까?답 은 가능 합 니 다.아래 코드 는 정확 합 니 다.
public class FinalExampleParent {
public final void test() {
}
public final void test(String str) {
}
}
수식 매개 변수자바 는 매개 변수 목록 에서 매개 변 수 를 final 로 표시 할 수 있 습 니 다.이 는 매개 변수 참조 가 가리 키 는 대상 을 방법 에서 변경 할 수 없습니다.이 기능 은 주로 익명 내부 클래스 에 데 이 터 를 전달 하 는 데 쓰 인 다.
수식 변수
public class Test {
//
final int i = 1;
final static int J = 1;
final int[] a = {1,2,3,4};
//
Random r = new Random();
final int k = r.nextInt();
public static void main(String[] args) {
}
}
k 의 값 은 난수 대상 에 의 해 결정 되 기 때문에 모든 final 수식 필드 가 컴 파일 기간 상수 가 아 닙 니 다.다만 k 의 값 은 초기 화 된 후에 변경 할 수 없습니다.6.static final
static 이자 final 필드 는 변경 할 수 없 는 저장 공간 만 차지 합 니 다.정의 할 때 값 을 부여 해 야 합 니 다.그렇지 않 으 면 컴 파일 러 가 통과 하지 않 습 니 다.
public class finaltest
{
//Random r
static Random r = new Random();
// k
final int k = r.nextInt(10);
// k2
static final int k2 = r.nextInt(10);
public static void main(String[] args) {
finaltest t1 = new finaltest();
System.out.println("k="+t1.k+" k2="+t1.k2);
finaltest t2 = new finaltest();
System.out.println("k="+t2.k+" k2="+t2.k2);
}
}
k=2 k2=7k=8 k2=7
우 리 는 서로 다른 대상 k 에 대한 값 이 다르다 는 것 을 알 수 있 지만 k2 의 값 은 같다.이것 은 왜 일 까?static 키워드 가 수식 하 는 필드 는 하나의 대상 이 아니 라 이 클래스 에 속 하기 때문이다.static final 이 수식 하 는 필드 는 메모리 의 한 공간 만 차지 하고 초기 화 되면 변경 되 지 않 는 다 고 간단하게 이해 할 수 있 습 니 다.
블랙 파이 널
자바 에 서 는 공백 final 을 만 들 수 있 습 니 다.즉,final 로 밝 혀 졌 지만 정 해진 필드 가 없 지만 이 필드 가 사용 되 기 전에 할당 되 어야 합 니 다.이것 은 우리 에 게 두 가지 선택 을 해 줍 니 다.
final int i1 = 1;
final int i2;// final
public finaltest() {
i2 = 1;
}
public finaltest(int x) {
this.i2 = x;
}
i2 의 할당 이 더욱 유연 한 것 을 볼 수 있 습 니 다.그러나 필드 가 static 과 final 로 수식 되면 정의 에 만 값 을 부여 할 수 있 습 니 다.이 필드 는 대상 에 속 하지 않 고 이 클래스 에 속 하기 때 문 입 니 다.8.final 도 메 인 정렬 규칙
위 에서 우리 가 말 한 final 사용 은 자바 의 기본 적 인 차원 에 속 해 야 한다.이런 것들 을 이해 한 후에 우 리 는 정말 final 을 파악 한 것 이 라 고 할 수 있 습 니까?final 이 다 중 스 레 드 에서 동시에 발생 하 는 상황 을 고려 해 본 적 이 있 습 니까?자바 메모리 모델 에서 우 리 는 자바 메모리 모델 이 프로세서 와 컴 파일 러 바 텀 이 그들의 가장 큰 장점 을 발휘 할 수 있 도록 바 텀 에 대한 제약 이 매우 적다 는 것 을 알 고 있다.즉,바 텀 에 있어 자바 메모리 모델 은 약 한 메모리 데이터 모델 이다.이 동시에 프로세서 와 컴 파일 은 성능 최 적 화 를 위해 명령 시퀀스 에 컴 파일 러 와 프로세서 가 정렬 됩 니 다.그렇다면 다 중 스 레 드 상황 에서 final 은 어떤 재 정렬 을 할 것 인가?스 레 드 안전 에 문제 가 생 길 수 있 습 니까?다음은 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에 따라 라이센스가 부여됩니다.