C, PHP, VB, .NET

Дневникът на Филип Петров


* Константи в 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 не може да бъде променяна, т.е. се държи напълно като константа. Така всъщност казваме, че имаме два типа константи:

  1. Създадени по време на компилация (първия пример);
  2. Създадени по време на изпълнение (втория пример).

Ключовата дума 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(); }
//}

В общи линии константни методи и константни класове се създават тогава, когато желаем сигурност на данните и искаме да сме уверени, че никой няма да създава обекти подобни на нашите, но с променена функционалност.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*