Java Final 자세히 보기
Final 수식자는 대부분 기본 데이터 형식 (primitive) 필드나 변할 수 없는 (immutable) 클래스에 사용됩니다. 클래스의 모든 방법과 방법이 그 대상을 바꾸지 않으면 변할 수 없는 클래스입니다. String은 변할 수 없는 클래스입니다.
[final 데이터]
Final 키워드용 코스메틱 데이터에는 다음과 같은 두 가지 경우가 있습니다.
1. 컴파일러 상수
2. 실행 시 초기화된 값
번역기 상량은final이자static의 영역을 가리킨다. (관례에 따라 번역기 상량은 모두 대문자로 명명하고 밑줄로 각 단어를 구분한다.) 이것은 변경할 수 없는 저장 공간만 차지한다.컴파일러는 컴파일러의 상수를 컴파일러가 사용할 수 있는 모든 계산식에 대입할 수 있다. 즉, 컴파일러에서 계산식을 실행할 수 있기 때문에 실행할 때의 부담을 상대적으로 줄일 수 있다.컴파일러 상수는 정의할 때 반드시 그것에 값을 부여해야 한다. (기본 형식은 아니다.)
실행할 때 초기화된 값은 기본 형식에 대해final이 변경할 수 없습니다.대상 인용에 대해final은 인용을 변경할 수 없습니다. 즉, 다른 대상을 가리키는 것으로 바꿀 수 없지만, 대상 자체는 수정할 수 있습니다. (수조에 적용되고, 수조도 대상입니다.)
public class javaFinalData{
private static final String TESTD = "test";
public static final String TESTE = "test";
public static final String[] TESTF = {"1","2"}; //
private static final String[] TESTG = new String[2];
public static void main(String args[]){
final int testA = 1;
final String testB = "test";
final int[] testC = {1,1,2,};
System.out.println(testC[1]);
testC[1] = 123;
System.out.println(testC[1]);
}
}
[값이 부여되지 않은final역]JAVA는 값이 부여되지 않은final 필드를 생성할 수 있지만, 필드의 정의나 모든 구조기에서final 필드를 부여해야 합니다. (몇 개의 구조기가 있으면 몇 번의 값을 부여해야 하는지) 사용하기 전에 초기화되어야 합니다.이런 방식을 사용하면final을 더욱 유연하게 운용할 수 있다. 같은 종류에서 서로 다른 대상에 따라 서로 다른 값을 부여하지만 바꿀 수 없는 특성을 유지할 수 있다
public class javaBlankFinal{
private final int blank;
public javaBlankFinal(){
blank = 2011;
}
public javaBlankFinal(int temp){
blank = 2012;
}
public javaBlankFinal(String temp){
blank = 2014;
}
public static void main(String args[]){
new javaBlankFinal();
}
}
[final 방법]final 방법을 사용하는 데는 두 가지 이유가 있다. 첫째, 방법을 잠그고 방법이 덮어쓰는 것을 방지하며 계승 중의 방법 행위가 변하지 않도록 확보한다.둘째, 방법 호출을 내연 호출 (inlining) 으로 바꾸어 방법 호출 비용을 줄인다.그러나 최근 버전에서는 JVM을 자체적으로 최적화할 수 있기 때문에final 방법으로 효율 문제를 처리할 필요가 없다.
final 방법에 관해서는 클래스의 모든 프라이빗 방법은final 방법으로 은밀하게 지정되어 있음을 주의해야 한다.프라이빗 방법을 덮어쓰려고 시도할 때, 컴파일러는 오류를 보고하지 않았지만, 실제로는 이 방법을 덮어쓰지 않았고, 단지 새로운 방법을 만들었을 뿐이다.프라이빗 방법은 외부 클래스에 접근할 수 없기 때문에 당연히 덮어쓸 수 없습니다.
@Override 메모를 사용하면 이러한 문제를 방지할 수 있습니다.프로그램 참조:
class finalFunction{
private void finalFunctionA(){
System.out.println("finalFunctionA");
}
private final void finalFunctionB(){
System.out.println("finalFunctionB");
}
final void finalFunctionC(){
System.out.println("finalFunctionC");
}
void functionD(){}
}
class overrideFinalFunction extends finalFunction{
//@Override @Override override
public void finalFunctionA(){
System.out.println("override finalFunctionA");
}
public final void finalFunctionB(){
System.out.println("override finalFunctionB");
}
//final void finalFunctionC(){} //Cannot override the final method from finalFunction
@Override
void functionD(){} // override
}
public class javaFinalFunction extends finalFunction{
public static void main(String args[]){
finalFunction ff = new finalFunction();
//ff.finalFunctionA(); // private
//ff.finalFunctionB();
overrideFinalFunction off = new overrideFinalFunction();
off.finalFunctionA(); //public
off.finalFunctionB();
}
}
[final 클래스]final 클래스를 사용하는 것은 일반적으로 디자인 원인으로 인해 이 클래스가 계승되는 것을 허락하지 않는다.이렇게 하면 류의 행동이 변하지 않을 뿐만 아니라, 아마도 약간의 안전 위기를 피할 수 있을 것이다.Final 클래스의 모든 방법은final 방법으로 은밀하게 지정되어 덮어쓸 수 없습니다. (final 클래스는 계승을 금지하고 클래스의 방법을 덮어쓸 수 없기 때문입니다.)Java 핵심 API에서final을 응용하는 예가 많은데, 예를 들면java이다.lang.String.String 클래스에 length () 를 덮어쓰지 않도록 final 을 지정합니다.
final 필드에 대해 말하자면, 하나의 클래스를final로 성명하더라도 클래스의 필드는final 필드가 되지 않습니다
final class finalClass{
int testA = 2011;
}
//class extendFinalClassextends finalClass{} //can not extendthe final class finalClass
public class javaFinalClass{
public static void main(String args[]){
finalClass fc = new finalClass();
System.out.println(fc.testA);
fc.testA = 2012;
System.out.println(fc.testA);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.