Jaké jsou rozdíly mezi proměnnými třídy a proměnnými instance v Javě? [uzavřeno]
On 1 ledna, 2021 by adminKomentáře
- Zdá se, že jste začali číst Výukové programy Java ™: Porozumění členům třídy , které vysvětluje to, ale ' to úplně nepochopil.
Odpověď
Oba jsou členské proměnné, což znamená, že oba jsou spojeny se třídou. Nyní samozřejmě existují rozdíly mezi těmito dvěma:
Proměnné instance:
Tyto proměnné patří do instance třídy , tedy do objektu. A každá instance této třídy (objektu) má vlastní kopii této proměnné. Změny provedené v proměnné se neprojevují v jiných případech této třídy.
public class Product { public int Barcode; }
Proměnné třídy:
Jsou také známé jako statické členské proměnné a existuje pouze jedna kopie této proměnné, která je sdílena se všemi instancemi dané třídy. Pokud v této proměnné dojde ke změnám, všechny ostatní instance uvidí účinek změn.
public class Product { public static int Barcode; }
Celý příklad:
// INSTANCE VARIABLE public class Main { public static void main(String[] args) { Product prod1 = new Product(); prod1.Barcode = 123456; Product prod2 = new Product(); prod2.Barcode = 987654; System.out.println(prod1.Barcode); System.out.println(prod2.Barcode); } } public class Product { public int Barcode; }
Výstup bude:
123456
987654
Nyní změňte proměnnou instance na proměnnou třídy tak, že ji nastavíte na statickou:
//CLASS VARIABLE public class Main { public static void main(String[] args) { Product prod1 = new Product(); prod1.setBarcode(123456); Product prod2 = new Product(); prod2.setBarcode(987654); System.out.println(prod1.getBarcode()); System.out.println(prod2.getBarcode()); } } public class Product { public static int Barcode; public int getBarcode() { return Barcode; } public void setBarcode(int value){ Barcode = value; } }
Použil jsem nestatické metody k získejte a nastavte hodnotu Barcode
, abyste ji mohli volat z objektu a ne fr om třída. Výstup bude následující:
987654
987654
Komentáře
- Proč příklad C # pro otázku Java?
- Moje myšlenky přesně. Vím pouze programování v Javě, ne C #, takže nemáte hodně pomohl
- @BasileStarynkevitch I ' m hlavně vývojář C # a protože princip se počítá pro oba a je stejně dobrý jako stejný, rychle jsem poskytl C # příklad se mi samozřejmě mýlí. 🙂 Změnil můj příklad na Javu.
- @SkylarAdams Omlouvám se, ale nesprávně jsem příliš rychle předpokládal, že každý, kdo zná Javu, zná C #. Změnil jsem příklad na Java, doufám, že to pomůže.
- U tohoto druhu otázek si myslím, že je irelevantní, ať už pomocí Java nebo C #,
Odpověď
Zde je vysvětleno (s příkladem Bicycle
třída s proměnnou třídy numberOfBicycles
a proměnnými instance cadence
, speed
, gear
& id
):
Někdy chcete mít proměnné společné pro všechny objekty. Toho je dosaženo pomocí modifikátoru
static
. Pole, která mají v deklaracistatic
modifikátor, se nazývají statická pole nebo proměnné třídy. Jsou spojeny spíše s třídou než s jakýmkoli objektem. Každá instance třídy sdílí proměnnou třídy, která je na jednom pevném místě v paměti. Libovolný objekt může změnit hodnotu proměnné třídy, ale s proměnnými třídy lze manipulovat i bez vytvoření instance třídy.
Proměnná třídy (deklarovaná) static
) je umístění společné pro všechny instance.
V tomto příkladu je numberOfBicycles
proměnná třídy (protože je deklarována static
). Existuje pouze jedna taková proměnná (tj. Umístění) společná pro všechny instance a třídu. Pokud tedy upravíte numberOfBicycles
v jedné metodě, jiné metody uvidí novou hodnotu (i pro různé Bicycle
objekty)
Naproti tomu gear
& id
jsou instance proměnné (protože jejich prohlášení nemá žádný static
modifikátor). Každý Bicycle
objekt má svůj vlastní. Pokud upravíte gear
pro některé Bicycle
a a pokud b je jiný instance, úprava a.gear
nemá žádný vliv na b.gear
Každý objekt Java je samostatnou zónou paměti s některými metadaty (např. nějaký odkaz na jeho třídu) a jeho vlastní proměnné instance (možná zděděné od nadtřídy).Proměnné třídy jsou ale společné pro třídu a sdíleny všemi instancemi.
Viz také Objekt (počítačová věda) & Proměnná instance wikipages.
Odpovědět
Proměnná instance:
- Proměnné instance jsou deklarovány ve třídě, ale mimo metodu, konstruktor nebo jakýkoli blok.
- Proměnná instance patří k instanci třídy nebo můžete říci, že proměnná instance patří k objektu.
-
Proměnná instance má samostatná hodnota každé instance třídy.
Class InstanceDemo { // this instance variable is visible for any child class. public String name = "Testing"; // count variable is visible in Demo class only. private int count = 2; }
Způsob přístupu k proměnné instance:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Výstup: 2, testování
Proměnná třídy:
- Proměnná třídy patří do třídy.
- Vytvoří se proměnná třídy přidáním klíčového slova „static“ před proměnnou.
- Také se nazývá statická proměnná.
-
A nejdůležitější proměnná třídy udržuje jedinou sdílenou hodnotu pro všechny instance třídy, dokonce pokud neexistuje žádný instanční objekt třídy.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Způsob přístupu k proměnné třídy:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Výstup: 2
Krátký rozdíl mezi proměnnou třídy a proměnnou instance:
- Proměnné instance mají pro každou hodnotu zvlášť instance třídy. Proměnné třídy udržují jednu sdílenou hodnotu pro všechny instance třídy, i když neexistuje žádný objekt instance dané třídy.
- Ke změně proměnné instance na proměnnou třídy byste použili statické klíčové slovo.
- Proměnné instance i třídy jsou deklarovány na úrovni třídy, nikoli v rámci metod.
Odpověď
Rozdíl mezi class variables
a instance
proměnnými je jednoduše otázkou who knows what?
.
instance variable
je znám pouze (= vázaný ) k této konkrétní instanci – odtud název.
public class Person { private String firstName; private String lastName; [...] }
Definice třídy je jako podrobný plán pro stavbu konkrétních objektů. Možná vás tento bod trochu zaměňuje . Ale když to zapíšeme tímto způsobem, bude každá proměnná vázána na svůj konkrétní objekt: např. Každý člověk má své vlastní křestní jméno
A class variable
na druhé straně je – jak název napovídá – známý každému členovi třídy; nebo technicky: Je známo / vázáno na úrovni třídy . Typickým příkladem je čítač kolik objektů jste vytvořili – i když je to velmi problematický příklad; ale na tom v této rané fázi nezáleží.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
je deklarován static
což je klíčové slovo pro rozdělení mezi class variables
a instance variabes
. Proměnná je deklarována jako ostatní v definici třídy . Klíčové slovo static
však signalizuje, že je jiné.
-
firstName
,lastName
jsou proměnné instance a vázané na konkrétní instanci -
numberOfPersons
je svázán se třídou, takže k této proměnné mohl přistupovat každý instance.
tl; dr
Místo, kde jsou proměnné definovány, je definice třídy.
Proměnné třídy jsou známé na úrovni třídy / vázané na ni, tj. každý konkrétní instance k ní má přístup. Chcete-li definovat proměnnou třídy, použijte klíčové slovo static
.
I Proměnné nstance jsou známé pouze na úrovni instance. Definujete je bez klíčového slova static
.
Další dokumentace pro Javu je zde
Napsat komentář