* Константи в 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(); }
//}
В общи линии константни методи и константни класове се създават тогава, когато желаем сигурност на данните и искаме да сме уверени, че никой няма да създава обекти подобни на нашите, но с променена функционалност.
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (52)
- Вероятности (31)
- История (15)
- Кучета (69)
- Лада Нива (96)
- Математика (166)
- Методика (53)
- Общи работи (110)
- ПИК-3 Java (38)
- Политика (41)
- Програмни Среди (1)
- ПТСК (41)
- С/C++ (45)
- Семейни (16)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Извеждане на няколко произволни реда
- Full-Text търсене с InnoDB в MySQL
- Късметче от кафе
- Пред блока…
- Бушонно табло на Лада Нива