final (Java)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В мові програмування Java, службове слово final використовується в кількох варіантах для визначення чогось, що пізніше не може бути зміненим. final може використовуватися при роботі з даними, методами та класами.

final та змінні[ред. | ред. код]

Багато мов програмування мають можливість повідомити компілятор, що певна змінна, або точніше частина інформації є «константою». В Java, final змінна може бути визначена (ініціалізована) лише один раз і більше не може змінюватися.

Приклад:

public class Sphere {

    public static final double PI = 3.141592653589793;  // this might as well be a constant
    public final double radius;
    public final double xpos;
    public final double ypos;
    public final double zpos;

    Sphere(double x, double y, double z, double r) {
         radius = r;
         xpos = x;
         ypos = y;
         zpos = z;
    }

    [...]
}

порожній final[ред. | ред. код]

Java дозволяє використання blank finals. Тобто полів класів, які визначені як final, але не ініціалізовані. У будь-якому випадку така змінна повинна бути ініціалізована перед тим, як з нею будуть працювати.

final методи[ред. | ред. код]

Є дві причини використання final для методів. Перша — ви хочете заборонити перевизначення (англ. override) вашого методу у класах-нащадках (перевантаження (англ. overload) дозволене). А друга причина є чіткість, визначеність та продуктивність для роботи компілятора. Для попередніх версій Java друга причина мала значення. Але починаючи з Java SE5/6 final використовується лише, коли ви чітко хочете зазначити, що хочете заборонити перевизначення вашого методу.

Приклад:

public class MyClass {
    public final void myFinalMethod() {...}
}

final класи[ред. | ред. код]

Якщо ви визначаєте свій клас як final, то це означає, що ви не хочете щоб хтось породжував свої класи від вашого.

В Java standard library classes наприклад java.lang.System та java.lang.String.

Приклад:

public final class MyFinalClass {}

Посилання[ред. | ред. код]