Jaký je rozdíl mezi finálním a statickým v Javě?


Nejlepší odpověď

Uh, jsou to úplně odlišné koncepty.

Člen označený jako statický patří do třídy, nikoli do žádné konkrétní instance. Někdy mohou mít třídy pouze statické členy, přičemž zřejmým příkladem je třída java.lang.Double, která „boxuje“ dvojitá primitiva: hodnotu jednotlivého dvojitého můžete získat pomocí metody instance (myDouble.doubleValue()) ale získejte „univerzální“ věci prostřednictvím statických členů (Double.MAX\_VALUE).

Člen označený final nemůže mít * svou hodnotu (což je jeho hodnota if primitive, or its reference if object) changed once initialized. Stále budete moci změnit vlastnosti objektu (může být měnitelný ) ale nemohli jste * nahradit objekt jiným. (* Můžete technicky „podvádět“ pomocí reflexe, manipulace s bytecode nebo jinými způsoby, jak „porušit pravidla“, ale pokud tak učiníte, pravděpodobně znáte vás znovu „podvádění“.)

Odpověď

Chcete-li vědět, kdy použít

private static final X x;

Měli byste vědět, k čemu se tato klíčová slova používají.

Podívejme se

  1. soukromý – Používá se, když chcete omezit určitého člena třídy na být mimo tuto třídu přístupný.
  2. static – Když deklarujete některého člena jako statického, je to spojeno s jeho třídou a ne s objektem. Pro zjednodušení bude statický člen inicializován při načtení třídy. Takže kdykoli aktualizujete hodnotu tohoto člena, budou aktualizována také všechna místa, na která je odkazováno. Ke statickému členu se tedy přistupuje podle názvu třídy a ne k jeho objektům, protože hodnota člena zůstane stejná bez ohledu na objekty.
  3. final – Toto klíčové slovo, pokud je použito s členskými proměnnými, definuje, že jakmile je třída načtena a je přiřazena hodnota, nelze ji změnit.

Pojďme se tedy podívat, co se stane když deklarujete proměnnou jako níže:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Nyní,

PRIVATE\_STATIC\_FINAL\_STRING je definován jako soukromý, takže zvítězil „Nebude přístupná mimo deklarovanou třídu. Je také definována jako statická, takže její hodnota zůstane stejná bez ohledu na objekty její třídy. A je definována jako konečná, takže po načtení třídy se její hodnota nezmění.

Proto PRIVATE\_STATIC\_FINAL\_STRING bude fungovat jako nemodifikovatelný řetězec na úrovni třídy, který nebude přístupný mimo deklarovanou třídu.

Doufám, že vám to pomůže odstranit vaše pochybnosti. Pokud potřebujete další pomoc, můžete se na mě obrátit a já se vám pokusím pomoci, jak jen mohu.

Hodně štěstí a šťastné učení!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *