Naučte se programování v Java

Variabilní scoping

Každá proměnná je k dispozici pouze (a dostupné) v kontextu, v jehož rámci byl vyhlášen. Chcete-li určit kontext, podívejte se na nejbližší značky otevírání a zavírání, které deklaraci obklopují. Většina programovacích jazyků používá složené závorky ({}) k označení začátku a konce bloku kódu. Podívejte se na tento příklad:

Rozsah proměnné

není třeba pochopit, že každý kousek kódu; soustředit jen na složených závorek. 🙂 Když mluvíme o dostupnosti proměnné v kontextu, máme na mysli rozsah. Zde můžete vidět, že proměnná root byla vyhlášena mezi dvěma složené závorky, kroužil ve fialové. Rozsah této proměnné je vše mezi těmito dvěma rovnátky.

rozsah proměnné může být lokální i globální v závislosti na tom, kde je proměnná deklarována. Globální proměnné mohou být k dispozici pro všechny třídy a metody v rámci programu, zatímco lokální proměnná může být k dispozici pouze v rámci metody, která je deklarována v:

Lokální vs globální rozsah

Zde rozšířili jsme kód a rozšířili naše první blok kódu, aby zahrnovala další! Pokud sledujete fialové čáry, můžete vidět, že závorky z prvního bloku zahrnují veškerý kód z druhého. Dále můžete vidět, že nová proměnná, spy, byla deklarována v rámci zeleného lokálního rozsahu.

vzhledem k tomu, že proměnná root byla deklarována v globálním rozsahu, znamená to, že je přístupná všemu ve fialových závorkách, včetně všeho deklarovaného v místním rozsahu. Ve druhém bloku kódu můžete vidět řádek těsně pod deklarací proměnné spy, který používá root. To je povoleno!

nicméně, co je v lokálním rozsahu, není k dispozici globálnímu rozsahu, ani jiným lokálním blokům kódu. Pojďme se podívat na další příklad:

Více rozsahů

přidali jsme další blok kódu, který má své vlastní místní působnosti a své vlastní proměnné, anotherSpy. Nyní se podívejte na poslední řádek v našem bloku proměnných spy:

System.out.println(anotherSpy); // Error

vypadá to, že došlo k chybě! Je to proto, že se pokouší použít proměnnou anotherSpy. Ale nemůže, protože anotherSpy není ani v globálním rozsahu, ani ve stejném lokálním rozsahu. To znamená, že tento blok kódu k němu nemá přístup. anotherSpy je k dispozici pouze v bloku kódu, ve kterém byl deklarován.

totéž platí v opačném směru. Můžete vidět, že poslední řádek našeho posledního bloku kódu má také chybu:

System.out.println(spy); // Error

zde se pokouší použít proměnnou spy z jiného bloku kódu. Ale to nemůže, protože spy není ve stejném rozsahu jako kódový blok, který se ho snaží použít.

rozsah proměnných ve třídách

když deklarujete třídu, platí stejná obecná pravidla pro rozsah: každá proměnná je přístupná pouze v bloku deklarace. Pojďme experimentovat s jednorožcem třída:

Jednorožec třídy

Stejně jako v našem prvním příkladu, tam jsou globální proměnné třídy, stejně jako ty místní. Podívejme se podrobně na to:

  • proměnné heightpower jsou pole třídy a jsou dostupné kdekoliv ve třídě.

  • proměnné minutesToSleep je přístupná pouze v rámci místní působnosti blok kódu je deklarovaná.

  • proměnné minutesToRun je přístupná pouze v rámci místní působnosti blok kódu je deklarovaná.

rozsah proměnné omezuje její přístupnost z definice. Pole třídy jsou však přístupná mimo třídu a mohou být použita jakýmkoli jiným blokem kódu.

v našem příkladu jsou to height a power. Pokud deklarujeme proměnnou Unicorn, můžeme tyto hodnoty číst nebo měnit:

schopnost pohrávat si s proměnnými třídy může mít vážné důsledky. Dobrá zpráva je – můžete to ovládat! Než se podíváme na to, jak, nezapomeňte cvičit s variabilním rozsahem.

vyzkoušejte si to sami!

řízení přístupu

použijeme myšlenku řízení přístupu implementací omezeného přístupu do třídy, modulu nebo souboru. Už víte, co je třída A soubor, protože s nimi pracujeme!

modul je svazek souvisejících zdrojových souborů spojených s názvem, jako framework. Rámec je soubor funkcí seskupených podle konkrétního kontextu. Urychluje proces vývoje a poskytuje návod, jak napsat kód.

každé vývojové prostředí poskytuje řadu rámců. Faktem je, že implementace těchto rámců je daleko nad rámec toho, co vývojáři, kteří je používají, mohou vidět a využívat. To se provádí omezením přístupu k podrobnostem implementace, známé také jako implementace řízení přístupu.

Ovládací úrovně

V jazyce Java, budete muset použít jednu z klíčových slov, aby určil kontrolní úroveň:

  • Veřejné: viditelné pro svět, a proto nejméně omezující

  • Chráněno: viditelné pro balíček a všechny její podtřídy

  • Balíček-chráněné: obvykle viditelné pouze pro balíček jsou v (výchozí nastavení)

  • Private: přístupné pouze v kontextu, ve kterém jsou definovány (uvnitř třídy je umístěn)

Uvedení těchto odlišných omezení na místě umožňuje vývoj mnohem jednodušší. Nemusíte se obávat nežádoucího zviditelnění vaší implementace a ještě více nežádoucích úprav.

umístěte vhodné Klíčové slovo před související prohlášení:

pak, pokud se pokusíte získat přístup k soukromým členům mimo třídu, dostanete chyby:

úrovně řízení mohou být přiřazeny k prvkům třídy i třídám:

public class PublicClass {}private class PrivateClass {}

kromě zabezpečení poskytuje lepší čitelnost určení úrovní řízení pro členy třídy. Když vývojář připravuje zdrojový soubor, je vždy jasné, které prvky lze použít externě.

Hierarchie ovládání

prvek může mít stejný nebo přísnější kontrolní úroveň, než je jeho obsahem elementu:

V příkladu výše, třída je deklarován jako public . Protože třída je obsahující prvek, znamená to, že všechny prvky této třídy mohou mít stejnou nebo menší úroveň expozice. V tomto případě zahrnuje všechny úrovně.

Pokud deklarujete třídu jako private, jeho prvky mohou být pouze package-private nebo private:

 class PrivateClass { int internalProperty = 0; // automatically assigned package-private by default protected defaultProperty = true; // automatically assigned package-private public boolean publicProperty = true; // automatically converted to package-private private String fileprivateProperty = "Hello!"; //only available to the class private static void privateMethod() { }}

V příkladu výše, přidali jsme atribut bez výslovného řízení přístupu klíčové slovo. V tomto scénáři ve výchozím nastavení předpokládá úroveň obsahujícího prvku. V tomto případě je to naše třída, takže předpokládá úroveň PrivateClass.

třídu nejvyšší úrovně nelze označit jako soukromou, ale její výchozí nastavení ji zařadí do úrovně chráněné balíčkem. Při deklaraci proměnné třídy, pokud je úroveň řízení kontextu deklarace vyšší než úroveň třídy, musí mít proměnná také explicitní úroveň řízení. Deklarujme proměnnou FileprivateClass:

String a = PrivateClass(); // Errorprivate String b = PrivateClass(); // Okprivate String c = PrivateClass(); // Ok

Jak můžete vidět, je-li výchozí úroveň přístupu proměnné kontextu je vyšší než třídy jsou přiřazení, musíte explicitně zadat proměnné úrovni jako stejná nebo nižší než jedné třídy.

Shrnutí

V této kapitole jste se dozvěděli o variabilní dostupnost:

  • rozsah proměnné je kód oblasti, kde je deklarována.

  • obecný rozsah proměnných se vztahuje na všechny bloky kódu, včetně tříd.

  • dalším nezbytným způsobem řízení přístupu k proměnným a funkcím je použití úrovní řízení: veřejné, chráněné,chráněné a soukromé.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.