* Константи в Java
Публикувано на 15 октомври 2009 в раздел ПИК3 Java.
Константите в Java се създават чрез ключова дума "final". Както е по дефиниция - константите задължително се инициализират и след това не могат да бъдат променяни:
final int x = 5; // x = 6; <<< Не е възможно
В Java обаче е възможно константата само да се декларира и да бъде инициализирана по-късно:
final int x; java.util.Scanner s = new java.util.Scanner(System.in); x = s.nextInt();
Все пак след тази инициализация x не може да бъде променяна, т.е. се държи напълно като константа. Така всъщност казваме, че имаме два типа константи:
- Създадени по време на компилация (първия пример);
- Създадени по време на изпълнение (втория пример).
Ключовата дума final важи за всякакви променливи:
public class finalExample{ public static void main(String[] args){ final A obj = new A(3); obj.x = 5; // Няма проблем - x не е константа // obj = null; <<< невъзможно - obj е константа! } } final class A{ public int x; public A(int x){ this.x = x; } }
В случая виждаме, че полетата на самия обект не са непроменяеми. Не може да бъде променен само адреса на променливата, която "сочи" към този обект. Въпреки, че това е възможно, то въобще не се използва.
В Java съществуват още две понятия - константни методи и константни класове. Те също използват ключовата дума final.
Константните методи не могат да бъдат предефинирани в клас-наследник. Например:
class A{ public A(){} final void func(){ System.out.println("Final function!"); } } class B extends A{ public B(){ super(); } // func() in B cannot override func() in A; // overridden method is final // void func(){ // System.out.println("Predefined?"); // } }
Константните класове пък са такива класове, които не могат да бъдат наследявани:
final class A{ public A(){} } // cannot inherit from final A //class B extends A{ // public B(){ super(); } //}
В общи линии константни методи и константни класове се създават тогава, когато желаем сигурност на данните и искаме да сме уверени, че никой няма да създава обекти подобни на нашите, но с променена функционалност.
Добави коментар