finalsłowo kluczowe w języku programowania Java, które zależnie od użytego kontekstu oznacza niezmienność deklarowanego elementu.

Zmienne finalne

edytuj

Zmiennej finalnej można tylko raz przypisać wartość co z reguły ma miejsce podczas jej deklaracji. Należy zwrócić uwagę, że w przypadku zmiennej reprezentującej obiekt wartością tej zmiennej jest wartość tej referencji – nie zaś sam obiekt. Oznacza to, że oznaczenie referencji jako finalnej nie oznacza, że stan obiektu na który ta referencja wskazuje nie może zostać zmieniony, a jedynie że samej zmiennej nie można przypisać drugi raz referencji do obiektu – choćby nawet tego samego.

Przykład:

public class MyProgram {

  public static void main( String[] args ) {
    // Deklaracja zmiennej finalnej i przypisanie wartości
    final int x = 2;

    // Niepoprawne: próba ponownego przypisania wartości.
    // x = 6;

    final Sphere s;
    s = new Sphere( 1 );

    // Zmiana stanu obiektu - poprawne gdyż final nie dotyczy niezmienności stanu obiektu
    s.radius = 123;

    // Niepoprawne - próba ponownego przypisania wartości polu finalnemu w klasie Sphere:
    // s.id = 2;

    // Niepoprawne próba ponownego przypisania referencji innego obiektu zmiennej lokalnej s
    // s = new Sphere( 3 );
    }

}

class Sphere {
    public float radius;
    public final int id;
    public Sphere( int givenId ) {
        // Przypisanie wartości polu finalnemu w klasie
        this.id = givenId;
    }
}

Metody finalne

edytuj

Ponieważ w Javie wszystkie metody są domyślnie wirtualne, implementacja każdej z nich może zostać podana lub zmieniona w klasach pochodnych. W celu zablokowania takiej możliwości należy metodę zadeklarować jako finalną. Oznacza to, że nie może ona zostać zaimplementowana w klasie pochodnej a jej implementacja musi zostać podana w klasie w której została zadeklarowana. Decyzja o zadeklarowaniu metody jako finalnej może być podyktowana tym aby zapobiec niespodziewanemu zachowaniu się metody w podklasach zachowując w ten sposób spójność całej klasy.

Przykład:

public class MyClass {
    public void myRegularMethod() {
        System.out.println("Jestem w myRegularMethod klasy MyClass");
    }
    public final void myFinalMethod() {
        System.out.println("Jestem w myFinalMethod klasy MyClass");
    }
}

public class MySubClass extends MyClass {
    public void myRegularMethod() {
        System.out.println("Jestem w myRegularMethod klasy MySubClass");
    }

    // Niepoprawne - nie można zaimplementować metody finalnej w podklasie:
    // public final void myFinalMethod() {
    //     System.out.println("Jestem w myFinalMethod klasy MySubClass");
    // }
}

Klasy finalne

edytuj

Zadeklarowanie klasy jako finalnej oznacza, że nie może być ona dziedziczona przez inne klasy co może być podyktowane względami bezpieczeństwa lub efektywności. Wiele standardowych klas Javy jest klasami finalnymi np.: java.lang.System i java.lang.String. Wszystkie metody w klasie finalnej są automatycznie finalne.

Przykład:

// Klasa finalna:
public final class FinalPoint {
    public final int x;
    public final int y;
}

// Niepoprawne - klasa próbuje dziedziczyć po klasie finalnej:
// public class 3DPoint extends FinalPoint {
//     public final int z;
// }

Klasa 3DPoint jest błędnie zadeklarowana ponieważ próbuje dziedziczyć po klasie finalnej, co spowoduje błąd kompilacji.

Linki zewnętrzne

edytuj

📚 Artikel Terkait di Wikipedia

Final Fantasy (gra komputerowa)

Final Fantasy I – 2007 (PSP) Final Fantasy – 2010 (telefony komórkowe, java) Final Fantasy Pixel Remaster – 2021 (PC, telefony) Na początku 1987 roku Square

Final Fantasy

Final Fantasy (jap. ファイナルファンタジー Fainaru Fantajī) – japońska seria gier, filmów i mangi z gatunku fantasy, stworzona przez Hironobu Sakaguchiego i produkowana

Strona internetowa

com [dostęp 2023-01-26] . The Final Countdown for NPAPI [online], Chromium Blog [dostęp 2023-01-26]  (ang.). Why do Java, Silverlight, Adobe Acrobat and

Doom (seria)

Edition (2012) Doom (2016) Doom Eternal (2020) Doom: The Dark Ages (2025) Final Doom (1996) Doom 64 (1997) Doom RPG Doom Resurrection (2009) Doom II RPG

Google Chrome

silnik JavaScript nazwany V8. W chwili premiery przeglądarki był najszybszym silnikiem na rynku według testu przygotowanego przez WebKit SunSpider JavaScript

IPhone (1 generacja)

Procesor Układ ARM Pamięć 128 MB eDRAM (137 MHz) Java MIDP brak udostępnionego oficjalnie oprogramowania Java Standardowa bateria Wbudowany akumulator litowo-jonowy

Leniwe inicjowanie

typów. import java.util.*; public class Fruit { private static final Map<String,Fruit>types = new HashMap<String,Fruit>(); private final String type; //

Microsoft Expression Web

września 2006. Final Build 4518 - Final - 4 grudnia 2006. Final Build 2008.1200.4518.1084 - Final - 1 maja 2008. Final Build 4.0.1165.0 - Final - 7 czerwca