В математиката и науката константата е термин, който обозначава определена стойност като 'π', което е практическо име за числото 3.14159. Java има своя вид константи. Това са променливи, които под (а) не принадлежат към нито един обект, а под (б) не променят стойността си, след като са зададени. Статичната дума в декларацията на променлива показва, че променливата не принадлежи на нито един обект. Има подобна ключова дума, която казва, че променливата стойност ще бъде зададена само веднъж и няма да се промени. Това е ключовата дума окончателна. Тази ключова дума не е ограничена до статични променливи, но може да се използва с променливи инстанции, локални променливи и дори с променливи, които са методи на параметри. Като декларирате променливата като крайна, вие показвате на всички, че променливата по време на съществуването ще има една и съща стойност. По-важното е, че компилаторът ще открие всеки опит за промяна на стойността на така декларираната променлива и ще я отчете като грешка. Що се отнася до терминологията на Java, променливата, която е декларирана като статична и финална, се нарича константа.
Крайният модификатор може да се използва на няколко места в езика за програмиране на Java. Тук ще разгледаме най-често срещаната му употреба. Крайният модификатор може да бъде приложен към декларирането на локална променлива, аргумент на функция и нестатични или статични променливи член. В този контекст променливият модификатор се преобразува в константа. Преводачът на езика на превода ще провери дали някой код се опитва да промени стойността и такива опити ще бъдат маркирани като грешка. Ето пример.
крайна стойност на int = 17;
Статичните променливи с този модификатор се използват като глобални константи; например в променливата PI на java.lang.Math се посочва точно
публичен статичен краен двоен PI = 3.14159265358979323846;
Можем да приложим окончателния модификатор към декларацията за функция. Функцията, маркирана с финала, вече не може да бъде отменена - това е нейното окончателно изпълнение. Абстрактните методи не могат да бъдат обявени за окончателни - фактът, че те са абстрактни, означава, че им липсва прилагане; това със сигурност не може да бъде тяхното крайно състояние. Ето пример.
публичен финал int значениеLife ()
връщане 42;
Можем да приложим окончателния модификатор към декларацията за клас. Класът, който е маркиран с финал, вече не може да наследи - това е неговата окончателна реализация. Ясно е, че абстрактният клас не може да бъде окончателен едновременно. Ето един пример
публичен финален клас Затворен
// ...
Един от примерите за ограничен клас е java.lang.String клас - той е ограничен, така че никой не може да го наследи и по този начин да получи достъп до своите променливи член.
Статичните променливи не принадлежат към конкретен случай на клас. Статичните променливи принадлежат към самия клас и в паметта има само едно местоположение, независимо от броя на копията от този клас, които са създадени в паметта. Нестатичните променливи принадлежат към образци на класа - всеки екземпляр от класа има свое копие на такива променливи. Статичните променливи принадлежат към клас - класът в паметта запазва стойностите на такива променливи; следователно всички примерни класове виждат едно и също съдържание, така че можем да считаме статичните променливи за споделяне между всички размери на класове. Чрез актуализиране на променливата на стойности, новата стойност ще бъде автоматично видима за всички екземпляри от този клас. Статичният филтър може да бъде приложен към всеки елемент, законно деклариран в клас. В случай на променливи членство, последицата е, че такива променливи член ще се съхраняват в паметта само на едно място. Какво се случва, ако е метод? Чрез деклариране на метода като статичен, съобщението е същото: съответният метод не принадлежи на класове от класове, а на самия клас. Следователно статичните методи няма да получат скрита препратка към обекта, над който са извикани при повикването; при статични референтни методи това не е достъпно. Всъщност, извикването на статични методи през обекта е еднакво объркващо като достъп до променливи статични членове, като се позовава на тази справка: и в двата случая е по-добре просто да напишете името на класа, точката и името на метода на извикване.
Статично означава променлива, която е обща за всички обекти, които създават даден клас, докато финалът определя константата.
Static е метод, който е един и същ за всеки обект, даден клас - нарича се също член на класа, напр. такъв е основният метод. Окончателният метод не може да бъде обработен в наследения клас.
Финалът не може да бъде разширен, т.е. не позволява подкласове. Static не се прилага за клас.
Казано по-просто, окончателно обозначава, че стойността не може да бъде променена (отменя). Статичната стойност е зададена по подразбиране, но може да се реинициализира.