>Java >java지도 시간 >최종 종합 심층 분석

최종 종합 심층 분석

巴扎黑
巴扎黑원래의
2017-07-19 13:14:131161검색


Java에는 final 키워드가 있으며 변수는 final 유형으로 선언될 수 있으며 final 유형 변수는 한 번만 할당될 수 있습니다. 최종 변수에 반복적으로 값을 할당하면 컴파일 오류가 발생합니다.


final 키워드의 의미는 무엇인가요?

final은 멤버 변수, 메소드, 클래스, 지역 변수를 선언할 수 있는 Java의 예약어입니다. 참조 final을 선언한 후에는 참조를 변경할 수 없습니다. 변수를 다시 초기화하려고 하면 컴파일러는 코드를 확인하고 컴파일 오류를 보고합니다.

최종변수란 무엇인가요?

final로 선언된 모든 멤버 변수 또는 지역 변수(메서드 또는 코드 블록의 변수를 지역 변수라고 함)를 최종 변수라고 합니다. 최종 변수는 종종 static 키워드와 함께 상수로 사용됩니다. 다음은 최종 변수의 예입니다.

public static final String LOAN = "loan";

LOAN = new String("loan") //잘못된 컴파일 오류

최종 변수는 다음과 같습니다. 읽기 전용 .

final 메소드란 무엇인가요?

Final 메소드에서도 메소드를 선언할 수 있습니다. 메서드 앞에 final 키워드를 추가하면 이 메서드는 하위 클래스의 메서드로 재정의될 수 없습니다. 메소드의 기능이 충분히 완성되어 하위 클래스에서 변경할 필요가 없다고 생각되면 해당 메소드를 final로 선언할 수 있습니다. 최종 메서드는 컴파일 타임에 정적으로 바인딩되고 런타임에 동적으로 바인딩될 필요가 없기 때문에 최종이 아닌 메서드보다 빠릅니다. 다음은 최종 메소드의 예입니다.

class PersonalLoan{
    public final String getName(){
        return "personal loan";
    }
}
 
class CheapPersonalLoan extends PersonalLoan{
    @Override
    public final String getName(){
        return "cheap personal loan"; //compilation error: overridden method is final
    }
}

최종 수업이란 무엇인가요?

final로 수정된 클래스를 final 클래스라고 합니다. 최종 클래스는 일반적으로 기능적으로 완전하며 상속될 수 없습니다. Java에는 String, Interger 및 기타 래퍼 클래스와 같은 최종 클래스가 많이 있습니다. 다음은 최종 클래스의 예입니다.

final class PersonalLoan{
 
    }
 
    class CheapPersonalLoan extends PersonalLoan{  //compilation error: cannot inherit from final class
 
}

최종 키워드의 이점

다음은 최종 키워드 사용의 몇 가지 이점을 요약한 것입니다

최종 키워드는 성능을 향상시킵니다. JVM과 Java 애플리케이션 모두 최종 변수를 캐시합니다.

추가 동기화 오버헤드 없이 멀티스레드 환경에서 최종 변수를 안전하게 공유할 수 있습니다.

final 키워드를 사용하여 JVM은 메소드, 변수 및 클래스를 최적화합니다.

효과적인 최종

변수는 다음 상황에 해당하는 경우에만 효과적으로 간주됩니다.

1. 최종으로 선언되지 않음

2. 가장 간단한 설명 방법

최종

이러한 수정 후에도 프로그램이 여전히 오류 없이 실행되고(컴파일이 통과된 경우 ^0^) 원래 실행 결과와 일치하는 경우 이 변수는 사실상 유효하다고 말할 수 있습니다. 결정적인. final의 이점

로컬 변수를 유효한 불변 변수로 제한하는 것은 개발자가 동시성 및 스레드로부터 안전한 개발을 더 잘 처리할 수 있도록 설계되었습니다. 변경 가능한 필드는 적절하게 관리되지 않으면 항상 동시성 문제의 잠재적 원인이 됩니다.

final 키워드 사용

변수, 메소드 매개변수 등을 final로 선언하는 것이 좋은 습관이라고 생각합니다. 이를 가볍게 수정하지 않도록 팀 내 다른 사람들에게 상기시키는 것이 좋습니다. 이것을 따로 두고 최종으로 선언하면 컴파일러가 이를 클래스 파일로 컴파일할 때 잘 최적화할 것입니다.

"클래스 파일의 최적화를 위해 소스 파일에서 final 키워드를 사용하는 것은 올바르지 않다"는 주장이 많이 있습니다. final 키워드 사용에 대한 Robert Simons Jr의 "

Hardcore Java

"을 읽어보는 것이 좋습니다. 세부 콘텐츠를 최적화했습니다. 애플리케이션에서 최종 키워드는 코드의 의도를 분명하게 보이게 하며 선언 후에도 변경되지 않으므로 매우 안전합니다.

public class FinalTest {

    public static final int N_ITERATIONS = 10_00_000;

    public static String testFinal() {
        final String a = "a";
        final String b = "b";
        return a + b;
    }

    public static String testNonFinal() {
        String a = "a";
        String b = "b";
        return a + b;
    }

    public static void main(String[] args) {
        long tStart, tElapsed;

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method with finals took " + tElapsed + " ms");

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testNonFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method without finals took " + tElapsed + " ms");

    }

}

실행 결과:

Method with finals took 5 ms
Method without finals took 273 ms
Summary

Final은 선언한 변수를 더 안전하게 만들고 코드를 더 명확하게 보이게 할 수 있습니다. 효과적인 Java는 또한 불변 클래스의 사용을 옹호합니다.


위 내용은 최종 종합 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.