Platnost proměnné - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Java

Platnost proměnné

java

2. září 2002, 00.00 | Víte jakým způsobem ovlivňují klíčová slova jako final či static platnost proměnné či její vlastnosti?

U deklarace jsem se zmiňoval o tom, že před typem proměnné mohou být ještě zmíněny klíčová slova jako public, private, static či final.

Tento díl našeho seriálu bych chtěl právě věnovat těmto a dalším klíčovými slovům, které ve směs souvisí s platností deklarované Proměnné..

Dříve než se podíváme na jednotlivá klíčová slova, musím připomenout, že základní vliv na platnost proměnné má její umístění v programu. Přesně řečeno její umístění vzhledem k begin a end ({ a }).

Tyto složené závorky neboli begin a end mají prostý význam. Označují vždy nějaký blok kódu a obecně platí, že deklarované proměnné platí pouze uvnitř tohoto a podřízených blocích tj. dalších blocích begin a end v něm vložených.

// soubor blok.java
{
     int i = 100;
     System.out.println(i); // vypíše i
     if  (i > 1) {
          System.out.println(i); // i je stále platné — podřazený blok
          int x = 2;
          System.out.println(x);
     }
     System.out.println(i);
     System.out.println(x); // x již není platné — jiný blok
// nelze zkompilovat, musíte odstranit předcházející řádku
}

Podívejme se na to, co zobrazuje tento příklad. Na začátku je otevření bloku, slovem begin. Následuje deklarace proměnné i s následným vypsáním. Dále je to podmínka, která otevírá další blok (begin), v něm se opět vypíše i z čehož je vidět že i je stále platné . Následně deklarace a vypsání nové proměnné x. Ukončení druhého bloku pomocí end. Opět pokračuje prvně otevřený blok a i je podle výpisu stále platné. Zatímco při výpisu x zjistíte, že již není deklarováno (nelze to ani zkompilovat)!

Ale vraťme se k začátku článku, řekl jsem že před typem proměnné u deklarace se mohou vyskytovat klíčová slova:

  • public
  • private
  • protected
  • private protected
  • final
  • static
  • transient
  • volatile
     [klíčové slovo] typ identifikátor;
Public

Public je jedním ze tří klíčových slov (public, private a protected), které určují platnost proměnné uvnitř programu. Použitím slova public v deklaraci říkáte, že dané proměnná bude dostupná odkudkoliv z programu resp. odkudkoliv, kde bude dostupná třída, ve které se ona proměnné nachází.

     public  int id_for_all;
Private

Je dalším klíčovým slovem pro platnost Proměnné.. Uvedením jako private říkáte, že proměnná bude dostupná pouze uvnitř třídy tj. mezi class neco { ... }. Od jinud není viditelná ani není možno ji měnit, narozdíl od public.

     private  int internal_value;
Protected

Je poslední z řady klíčových slov s významem platnosti Proměnné.. Protected je hodně podobná private, také takováto proměnná je dostupná pouze ve vlastní třídě, ale navíc oproti private je také dostupná v podtřídách resp. balíku jehož je součástí.

     protected  int internal_value;
Private a protected

Poslední možností, která se týká platnosti je kombinace předešlých dvou klíčových slova a to private a protected. Srovnáme-li si charakteristiky obou slov, pak výsledek v podobně obou slov se chová tak, že proměnná je dostupná jak ve své třídě, tak v podtřídách, ale již není dostupná ve vlastním balíku.

     private  protected  int my_value;
Final

Je prvním z řady klíčových slov, které se týkají způsobu platnosti Proměnné.. Proměnné deklarovaná jako final má to specifikum, že její hodnota nelze změnit. Jinak řečeno jde o konstantu, ty se podle konvence často zapisují velkými písmeny.

     final  String TITLE = "Welcome";

Asi bych se měl opravit, hodnotu konstanty lze pouze jednou nastavit tzn. hodnota konstanty může být přiřazena až několik řádků po její deklaraci. Není tedy podmínkou, že by musela být přiřazena již při deklaraci.

     final  int INCH;
     ...
     INCH = 2.54;
Static

Static se vztahuje k třídám a objektům. V podstatě v sobě obsahuje způsob jak sdílet Proměnné.. Příklad vytvoříme si třídu pes a v ní deklarujeme proměnou pocet_nohou a to jako static. Vytvoříme-li objekt pes_1 a pes_2 podle naší třídy pes, pak změníme-li statickou proměnou např. u pes_1, pak se tím změní i tato proměnná u objektu pes_2. Platí o obráceně.

// soubor pes.java
public  class  pes {
     public  static  pocet_nohou = 4;
} // konec třídy pes

// soubor neco.java
public  class  neco {
     public  static  void  main(String  args[]) {
          pes pes_1 = new  pes(); // vytvoříme objekt pes_1 podle třídy pes
          pes pes_2 = new  pes(); // vytvoříme objekt pes_2
          System.out.println(pes_1.pocet_nohou);
          System.out.println(pes_2.pocet_nohou);
          pes_1.pocet_nohou = 5;
          System.out.println(pes_1.pocet_nohou);
          System.out.println(pes_2.pocet_nohou);
     }
}

Zatímco kdyby ve třídě pes nebylo uvedena proměnná pocet_nohou jako static, tak její změna u objektu pes_1 či pes_2 nemá vliv na žádný jiný objekt.

Jak to pracuje? Vytvoříme-li ve třídě nestatickou proměnou, pak se v paměti alokuje (přiřadí jí) nové místo v paměti každá takováto proměnná má svoje vlastní místo. Zatímco při deklaraci jako static se při vytvoření přiřadí proměnné vždy stejná adresa v paměti. To má za následek, že tato proměnná jakéhokoliv objektu odkazuje na stejné místo (hodnotu) a její změna změní její hodnotu všem objektům dané třídy.

Transient

Toto klíčové slovo podporuje snad až Java 2 verze 1.4. Při deklaraci nějaké proměnné jako transient říkáte, že tato proměnná není trvalou součástí objektu, metody a je pouze dočasného charakteru, Java ji tedy neukládá na disk.

     transient int temp_value;
Volatile

Toto klíčové slovo má zamezit kompilátoru Javy aby při kompilaci zdrojového kódu s touto proměnou mohl provést optimalizaci. Ta se provádí standardně. Možné použití se rýsuje v programu, který je více threadový. Optimalizace by zde mohla způsobit, že se vám vrátí špatná hodnota proměnné, jestliže byla proměnná změněna.

     volatile int value;

Zmíněné zdrojové kódy. (2 kB)

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Java  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: