Mi a különbség a Java-ban a végleges és a statikus között?


Legjobb válasz

Ja, teljesen különböző fogalmak.

A statikusnak jelölt tag osztályhoz tartozik, nem pedig bármely konkrét példányhoz. Néha előfordulhat, hogy az osztályoknak csak statikus tagjai vannak, nyilvánvaló példa a java.lang.Double osztály, amely kettős primitíveket „dobozol”: egy példány metódussal megkaphatja az egyedi kettős értékét (myDouble.doubleValue()), de statikus tagokon keresztül (Double.MAX\_VALUE) “univerzális” dolgokat szerezhet.

A véglegesen megjelölt tagnak * nem lehet értéke (ez az értéke) ha primitív, vagy annak hivatkozása ha objektum) inicializálása után megváltozott. Előfordulhat, hogy továbbra is módosíthatja egy objektum tulajdonságait (lehet, hogy változtatható ) de nem tudta * kicserélni az objektumot egy másikra. (* Technikailag „megcsalhat” reflexióval, bájtkód-manipulációval vagy a szabályok megsértésének más módjaival, de ha ezeket megteszi, akkor vélhetően ismeri “csalás”.)

Válasz

Tudni, mikor kell használni

private static final X x;

Tudnia kell, hogy mit használnak ezek a kulcsszavak.

Lássuk

  1. privát – Akkor használják, ha egy osztály bizonyos tagját korlátozni szeretné ne legyen elérhető az adott osztályon kívül.
  2. statikus – Ha bármelyik tagot statikusnak nyilvánítja, akkor az az osztályához kapcsolódik, és nem objektum. Ennek egyszerűsítése érdekében a statikus tag inicializálódik, amikor az osztály betöltődik. Tehát, amikor frissíti az adott tag értékét, az összes hely, ahova hivatkoznak, szintén frissülni fog. Ezért a statikus taghoz osztálynévvel férünk hozzá, és nem az objektumaik, mivel a tag értéke ugyanaz marad objektumoktól függetlenül. >
  3. végleges – Ez a kulcsszó tagváltozókkal együtt használva meghatározza, hogy ha az osztály betöltődik és az értéket hozzárendelik, nem lehet megváltoztatni.

Tehát nézzük meg, mi történik amikor az alábbihoz hasonló változót deklarál:

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

Most

A PRIVATE\_STATIC\_FINAL\_STRING privátként van meghatározva, így nyert “ne legyen hozzáférhető rajta kívül” s deklaráló osztály. Statikusként is definiálva van, így értéke ugyanaz marad, függetlenül az osztály objektumaitól. És véglegesként definiálva van, tehát ha az osztály betöltődik, akkor az értéke nem változik.

Ezért a PRIVATE\_STATIC\_FINAL\_STRING módosíthatatlan osztályszintű karakterláncként fog működni, amely “nem lesz elérhető rajta kívül” deklaráló osztályként.

Remélem, hogy ez segít tisztázni a kétségeit. Ha további segítségre van szüksége, hozzám fordulhat, és megpróbálok minél többet segíteni.

Sok sikert és boldog tanulást!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük