Java - mi a "static" kulcsszó az oop osztályban, kód q - a Russian (en)

a statikus tagok egy adott osztály helyett egy osztályhoz tartoznak.

Ez azt jelenti, hogy a statikus mezőnek csak egy példánya van [1], még akkor is, ha az osztály egy millió példányát hozza létre, vagy nem hoz létre. Ezt minden esetben használják.

Mivel a statikus módszerek nem vonatkoznak egy adott példányra, nem hivatkozhatnak példánytagokra (hogyan tudná, hogy melyik Hello-osztály példányt szeretné elérni?). a statikus tagok csak statikus elemekre hivatkozhatnak. A példány tagjai természetesen hozzáférhetnek a statikus tagokhoz.

Megjegyzés: Természetesen a statikus tagok hozzáférhetnek a példány tagjaihoz az objektum hivatkozáson keresztül.

[1]: A végrehajtási idő jellemzőitől függően lehet ClassLoader vagy AppDomain vagy egy adatfolyam, de ez nem vonatkozik a pontra.

Ezért, ha azt szeretnénk, hogy egy „új Hello” bárhol a kódban: A- az első forgatókönyv (megváltoztatni anélkül, hogy a használata „statikus”), akkor hozzon létre egy új órát minden alkalommal az úgynevezett „új Hello”, de B- a második forgatókönyvben (a változás után a "statikus") az "új Hello" minden példánya továbbra is megosztja az első és az "óra" linket, amelyet először hoztak létre.

Ha nincs szüksége egy "óra" valahol kívül a fő, ez fog működni ugyanúgy:

A statikus kulcsszó azt jelenti, hogy valami (egy mező, egy módszer vagy egy beágyazott osztály) van társítva egy típussal, és nem egy adott típusú példányban. Például Math.sin (.) A Math osztály minden példánya nélkül. és tényleg nem tudod megmutatni a Math osztályt.

A Java sajnos sajnos lehetővé teszi a statikus tagok hozzáférését, mintha egy példány tagja lenne

Ez úgy tűnik, mintha az alvás egy példánymód, de valójában statikus módszer - mindig az aktuális szálat alszik. A legjobb, ha ezt a hívószámon:

A statikus Java kulcsszó azt jelenti, hogy egy változó vagy függvény az összes típus között elosztva típusonként. de nem maguk a tárgyak.

Tehát, ha van egy változó: private static int i = 0; És növeli (i ++) egy példányban, ez a változás minden esetben megjelenik. Most minden esetben 1 leszek.

A statikus módszerek objektum instantiálása nélkül használhatók.

Ez azt jelenti, hogy nem kell az osztály egy példányát használni a módszer használatához. Ezért a példában hívhatja a következőket:

Egy statikus módszeren belül (amely csak egy osztályhoz tartozik) nem férhet hozzá olyan tagokhoz, amelyek nem statikusak, mert értékeik az osztály példányától függenek. Így a példányhoz tartozó Óra különböző értéket / referenciát fog tartalmazni a Hello osztály minden egyes példányára, ezért nem érheti el az osztály statikus részéből.

Ez a vita mindeddig figyelmen kívül hagyta az osztályterhelés szempontjait. Szigorúan szólva, a Java statikus mezők osztoznak az osztály összes betöltő osztályának összes példánya között.

A statikus elemek alapvető használata.

Így érheti el az osztály összes tagja által megosztott értékeket anélkül, hogy a Hello osztály egy példányát másik osztályba küldené. Statikus nélkül nem kell instanszírozni egy osztályt.

Egyszerűen statikus értékeket vagy módszereket hívhat meg az osztály nevével:

A statikus módosítás nélküli modifikátor. A statikus kulcsszó az osztályhoz tartozik, mint az osztály egy példánya. A változó vagy a módszer egy osztályhoz csatolására használható.

A statikus CAN kulcsszó a következőkkel használható:

Egy másik osztályba ágyazott osztály

NEM lehet használni a következőkkel:

Osztály (nem beágyazva)

Módszer helyi belső osztály (különbség, majd beágyazott osztály)

A belső osztály módszerei

Képzeljük el a következő példát, amelynek egy olyan példányváltozója neve, amelyet a konstruktor növekszik:

Mivel az instance változó memóriát kap az objektum létrehozásakor, minden objektumnak megvan a példányváltozója egy példánya, ha növekszik, nem tükrözi más objektumokat.

Most, ha a példány statisztikai változóját változóvá változtatjuk, akkor a program egy másik kimenetet eredményez:

Ebben az esetben a statikus változó csak egyszer fog emlékezni, ha bármelyik objektum megváltoztatja a statikus változó értékét, megtartja annak értékét.

Statikus a döntővel:

A véglegesnek és statikusnak nyilvánított globális változó változatlan marad minden végrehajtásnál. Mivel a statikus tagok az osztálymemóriában vannak tárolva, és csak egyszer töltődnek be a teljes végrehajtás során. Ezek közösek az osztály összes tárgyához. Ha a statikus változókat véglegesnek nyilvánítja, bármelyik objektum nem módosíthatja annak értékét, mivel végleges. Ezért a véglegesnek és statikusnak nyilvánított változókat néha állandónak nevezik. Minden interfészmezőt állandónak neveznek, mivel alapértelmezés szerint ezek véglegesek és statikusak.

Egy mező egy osztály vagy egy osztály egy példányához rendelhető. Alapértelmezés szerint a mezők példányváltozók. Egy statikus mező használatával osztályváltozóvá válik, így van egy és csak egy óra. Ha egy helyen változtat, akkor mindenhol látható. A változók egymástól függetlenül változnak.

A Java-ban a statikus kulcsszó egyszerűen a következőképpen nézhető ki:

"Függetlenül attól, hogy milyen hozzáállás vagy konkrét eset"

Ha ily módon statikusan gondolkodik, könnyebb megérteni annak használatát a különböző környezetekben, amelyekben ez történik:

A statikus mező olyan mező, amely egy osztályhoz tartozik, és nem egy adott példányhoz

A statikus módszerek nem használnak olyan osztályváltozókat, amelyekben definiáltak. A különbség nagyon jó magyarázata megtalálható ezen az oldalon

Szolidaritást értek el a statikus módszerekkel (csak akkor, ha lehetséges) a "asszisztens" osztályokban.

A hívó osztálynak nem kell létrehoznia a helper osztály egy másik tagváltozóját (példányt). Csak segédosztályú módszereket hívsz. A segítői osztály is javult, mert már nincs szükség konstruktornál, és nem kell tagváltozók (példányok).

Valószínűleg vannak más előnyök is.

A statikus kulcsszó arra utal, hogy egy mezőt vagy egy metódust magának az osztálynak és nem egy példánynak neveznek. A kód használata, ha az óra objektum statikus, a Hello osztály összes példánya osztja az Óra (mező) adatelemet. Ha nem statikus, minden egyes Hello példánynak egyedi "Óra" lehet.

A probléma az, hogy hozzáadtad a fő módszert a Hello osztályodhoz, hogy futtasd a kódot. A probléma itt az, hogy a fő módszer statikus, és mint ilyen nem utalhat a nem statikus mezőkre vagy eljárásokra. Ezt két módon megoldhatja:

  1. Hozzon létre a statikus Hello osztály összes mezőjét és módját, hogy a fő módszer belsejébe hivatkozhasson. Ez valóban nem jó (vagy rossz ok miatt a mező és / vagy a módszer statikus)
  2. Hozzon létre egy Hello osztály egy példányát a fő módszer belsejében, és hozzáférjen az összes mezőjéhez és módszereihez, mivel azokat először tervezték.

Számodra ez a következő változást jelenti a kódodban:

A Static a tagot az osztály tagjaivá teszi ahelyett, hogy egy példány tagja. Statikus kulcsszó nélkül létre kell hoznia egy Hello-osztály egy példányát (amely szinkronizációs elem változót tartalmaz), például

Azt is gondolhatsz olyan statikus tagokra, akiknek nincs "ez" mutatójuk. Ezek az összes példány között oszlanak meg.

Még egyszer, ne feledje, hogy a CLASSLOADER statikus osztályának egy példánya van.

Itt Fő egy statikus módszer, és a statikus módszer két fő korlátja van:

  1. A statikus módszer nem használhat nem statikus adatelemet, vagy közvetlenül hozzáférhet nem stacionárius módszerhez.

Ez és a szuper nem használható statikus környezetben.

Kimenet: fordítási idő hiba

A meglévő válaszok hozzáadásához próbáld ki a képet:

Statikus fogalmak megértése

Statikus változók Ezekhez csak statikus módszerekkel férhetünk hozzá, így statikus változók deklarálásakor a getter és a setter módszerek statikus módszerek

A statikus módszerek egy olyan osztály szintje, amelyet az osztálynév használatával elérhetünk

Az alábbiakban egy példa a statikus változókra: Getters and Setters:

A kulcsszó statikus módosító változó használatakor egy olyan változót hoz létre, amely az osztály használatával létrehozott objektumok bármely példányától függetlenül létezni fog. A statikus változókat csak egyszer, az alkalmazás elején kell inicializálni, néha az alkalmazás futtatásának. A statikus módosító kulcsszavát használó változókat először inicializálni kell, mielőtt bármilyen példányváltozót inicializálna. A statikus változónak csak egy példánya létezhet a rendszer memóriájában, függetlenül attól, hogy a változót tartalmazó osztályok száma mennyi. Így a statikus Java kód azt jelenti, hogy a változó az osztályhoz tartozik, nem pedig az ezen osztály által létrehozott objektumok példányaihoz.

A statikus statikus módosítás a statikusként deklarált módszerek esetében is megegyezik, ezért a statikus módosítót olyan módszerek létrehozására használják, amelyeknek az osztály használatával létrehozott objektumok bármely példányától függetlenül léteznek. Ez újra megjavítja a módszert a helyén, ezért ez az egyetlen példány ennek a módszernek, amelyet az osztályod és az adott osztály objektumai használnak.

A statikus módszerek nem használhatnak olyan példányváltozókat, amelyek az általuk létrehozott objektumokkal létrehozott objektumok bármely példányát határozzák meg, amíg az ilyen objektum-példányok létrehozása meg nem történik. A statikus módszereknek meg kell adniuk az összes adatot a bejövő paraméterek listájáról, majd ezeket a paramétereket kiszámítani anélkül, hogy olyan változók hivatkoznának, amelyek eredendően nem statikusak, mert változók!

A statikus módszer két fő korlátja. Ezek:

1. A statikus módszer nem használhat nem statikus adatelemet, vagy közvetlenül hozzáférhet nem stacionárius módszerhez.

2.Az és a szuper nem használható statikus környezetben.

Az első oka a fordítási hiba