Centrum wiedzy o technologiach i pracy w IT
java final

Java final – zastosowania i przykłady

Ostatnia aktualizacja 3 kwietnia, 2024

Słowo kluczowe final odgrywa w języku Java istotną rolę. Pozwala ono na tworzenie zmiennych, które nie mogą zmienić swojej wartości, metod, których nie można przesłonić oraz klas, których nie można rozszerzać. W jaki sposób z tego korzystać?

Nie udało się zapisać Twojej subskrypcji. Spróbuj ponownie.
Udało się! Widzimy się niebawem – newsletter wysyłamy w każdy wtorek

Otrzymuj za darmo unikalne poradniki, dane i wiedzę o pracy w IT – dostarczane co tydzień

Klikając “Zapisz mnie” wyrażasz zgodę na otrzymywanie e-maili od redakcji, a także ofert partnerów oraz akceptujesz naszą Politykę prywatności.

Java final – zastosowanie w zmiennych

Słowo kluczowe final można użyć w deklaracji zmiennych, której wartości nie da się zmienić po przypisaniu. To znaczy, że zmienna staje się efektywnie stałą.

final int LIMIT = 5;
System.out.println(LIMIT);

W powyższym przykładzie zmienna LIMIT jest oznaczona jako final. Oznacza to, że nie można jej wartości zmienić po inicjalizacji. Próba przypisania nowej wartości do LIMIT spowodowałaby błąd kompilacji.

Java final w metodach

Kiedy final stosuje się do metody, oznacza to, że nie może być ona przesłonięta w klasach pochodnych.

class Base {
    final void show() {
        System.out.println("To jest metoda finalna.");
    }
}

class Derived extends Base {
    // Próba przesłonięcia metody show() spowodowałaby błąd kompilacji
}

W tym przykładzie metoda show() w klasie Base jest oznaczona jako final, co oznacza, że żadna klasa pochodna (np. Derived) nie może przesłonić tej metody.

Java final w klasach

Użycie final z klasą oznacza, że nie można jej rozszerzyć. Innymi słowy, nie możesz tworzyć klas potomnych od klasy oznaczonej jako final.

final class Immutable {
    private int value;

    Immutable(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

// Próba rozszerzenia klasy Immutable spowodowałaby błąd kompilacji

W przykładzie klasa Immutable jest oznaczona jako final, co uniemożliwia jej rozszerzanie. To sprawia, że jest dobrym kandydatem na klasę reprezentującą wartości niezmienne.

Skutki wykorzystania final w polimorfizmie

Słowo kluczowe final ma również wpływ na polimorfizm w Javie. Przez ograniczanie możliwości przesłaniania metod, final wprowadza pewność co do zachowania metody w hierarchii dziedziczenia.

class Animal {
    final void eat() {
        System.out.println("To zwierzę je.");
    }
}

class Dog extends Animal {
    // Próba dodania metody eat() tutaj zakończyłaby się niepowodzeniem
}

W tym przypadku metoda eat() w klasie Animal jest oznaczona jako final. Oznacza to, że klasa Dog nie może mieć własnej implementacji tej metody.

Dalsza część tekstu znajduje się pod materiałem wideo:

Kiedy wykorzystywać słowo kluczowe final w Javie?

  • Deklaracja stałych. Użycie final przy zmiennych pozwala na tworzenie stałych, których wartości nie można zmieniać po ich zainicjowaniu. Zwiększa to czytelność kodu i zapobiega przypadkowym modyfikacjom.
  • Zapobieganie przesłanianiu metod. Oznaczenie metody jako final uniemożliwia jej przesłonięcie w klasach pochodnych. Jest to przydatne w przypadku, gdy chcemy zachować oryginalne zachowanie metody bez względu na dziedziczenie.
  • Zapobieganie dziedziczeniu klas. Kiedy klasa jest oznaczona jako final, nie można jej rozszerzyć. Jest to użyteczne dla klasy reprezentującej wartości niezmienne lub zapewniającej szczególne zachowanie, które nie powinno być modyfikowane.
  • Bezpieczeństwo wątków w kontekście obiektów niezmiennych. Zmienne oznaczone jako final w obiektach niezmiennych mogą być bezpiecznie dostępne przez wiele wątków bez konieczności synchronizacji, co sprawia, że są one przydatne w programowaniu wielowątkowym.
  • Optymalizacja wydajności. Kompilator i maszyna wirtualna Javy mogą wykorzystać informację o final do optymalizacji kodu, np. przez inline’owanie metod, co może przynieść korzyści wydajnościowe.

Dziękujemy, że przeczytałaś/eś nasz artykuł. Obserwuj EnterTheCode.pl w Wiadomościach Google, aby być na bieżąco.

Czytaj także:

Garbage Collector w Javie. Podstawy i działanie

Yield w Javie. Jak poprawić wydajność wielowątkową?

Total
0
Shares
_podobne artykuły