1. Statikus változók
Amikor egy osztályt betöltünk a memóriába, azonnal létrejön egy statikus objektum . Ez az objektum statikus osztályváltozókat (statikus osztálymezőket) tárol. A statikus objektum akkor is létezik, ha az osztályból nem jött létre közönséges (nem statikus) objektum.
Amikor változókat deklarálunk egy osztályban, jelezzük, hogy csak egyszer jönnek-e létre, vagy minden objektumban legyenek ezeknek a változóknak külön példányai. Alapértelmezés szerint minden egyes objektumhoz minden változó új másolata jön létre.
Egy statikus változó az osztály statikus objektumához van kötve, és mindig van belőle egyetlen példány.
static
Ha statikus változót szeretne létrehozni egy osztályban, a kulcsszót a neve elé kell írnia . A statikus változó deklarálásának általános formátuma a következő:
static Type name = value;
Ha egy statikus változóhoz nincs hozzárendelve kezdeti érték, akkor az alapértelmezett értékkel inicializálódik:
típus | Alapértelmezett érték |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(ugyanaz, mint
) |
|
|
és bármilyen osztályt |
|
Példák:
Kód | jegyzet |
---|---|
|
|
|
|
|
|
|
|
|
Egy osztályon belül a statikus változóira egyszerűen a nevük használatával hivatkozhatunk. De ahhoz, hogy egy másik osztályból hozzáférjen, az osztály nevét a statikus változó neve elé kell írnia.
ClassName.variable
Példa:
Változó | Osztály | Az osztályán kívüli változó elérése |
---|---|---|
|
|
|
|
|
|
|
|
A változó a private . Az osztályon kívül nem látható. |
|
|
A változó a private . Az osztályon kívül nem látható. |
|
|
A változó a private . Az osztályon kívül nem látható. |
2. Statikus és nem statikus változók közötti különbség
Egy osztály nem statikus (közönséges) változóit ugyanúgy deklaráljuk, mint a statikusakat, csak kulcsszó nélkül static
.
Mi a különbség a közönséges változók és a statikus változók között?
Az osztály közönséges változói az osztály objektumaihoz (az osztály példányaihoz), míg a statikus változói az osztály statikus objektumához vannak kötve.
Ha egy osztálynak több példánya van, mindegyiknek megvan a saját másolata a nem statikus (közönséges) változókról. Egy osztály statikus változóit mindig a statikus objektum tárolja, és csak egyetlen példány létezik belőlük.
Egy osztály közönséges változóit (mezőit) csak akkor érheti el, ha van hivatkozása az osztály egy objektumára. És természetesen az osztály belső módszerei.
Példa:
Egy osztály mezőjének elérése objektumhivatkozás segítségével |
---|
|
A statikus változókat bárhonnan elérheti (a láthatósági módosítók elszámolása után): normál metódusokból, azonos osztályú statikus metódusokból, más osztályok metódusaiból stb.
Példa:
Egy osztály statikus mezőjének elérése objektumhivatkozás használata nélkül |
---|
|
Hogyan szerveződik a memória:
Tegyük fel, hogy van egy Person
osztályunk 4 mezővel: kettő statikus, kettő pedig nem.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Közvetlenül az osztály betöltése után
Amikor a Java gép befejezte az Person
osztály betöltését, a memória így fog kinézni:
Az első objektum létrehozása után
Ha létrehozunk egy Person
objektumot, akkor a kép a következő lesz:
Kérjük, vegye figyelembe, hogy bár mindkét objektumnak két változója van, ezek különböző változók: a közönséges objektumok szokásos változókkal, a statikus objektumok pedig statikus változókkal rendelkeznek.
Több tárgyra van szükségünk
Hozzunk létre még két Person
objektumot. A memória most így fog kinézni:
Kérjük, vegye figyelembe, hogy minden objektumnak megvannak a saját kor- és névváltozói.
static
3. A módosító eltávolítása és hozzáadása
A statikustól a hétköznapiig
Mi történik, ha veszünk egy statikus változót, és a módosítójának eltávolításával közönségessé alakítjuk static
? Például a static int sum
változó.
A módosított kód így fog kinézni:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
A memória most így néz ki:
A statikus változó eltűnt a statikus objektumból, és most minden közönséges objektumnak megvan a saját sum
változója.
A hétköznapitól a statikusig
Megtehetjük az ellenkezőjét is: hozzáadjuk a static
módosítót egy osztály közönséges változóihoz. Eltűnnek minden hétköznapi objektumról, és megjelennek a statikus objektumban. Tegyük fel, hogy a és változókat statikussá tesszük . age
name
Ezután a kód így fog kinézni:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
És most a memória így fog kinézni:

GO TO FULL VERSION