A konstansok, az enums és a statikus import a java, stokito a szoftver

A konstans nagyjából egy változó, amelynek értéke nem változik a program futása közben. Egy konstans klasszikus példája a Pi szám (3.14 ...). A konstansokat a Magic számok leküzdésére használják. azaz nem világos, hogy milyen jelentések számát vagy sztringjeit.

De vannak rugalmasabb végleges módosítók:

Ebben a példában a PI nevû végleges változót deklaráltuk, és azonnal 3,14-re állítottuk. A végleges változók csak egyszer állíthatók be, és már nem módosíthatók. Minden olyan kísérlet, amely megváltoztatja a fordító végleges változójának (vagy mezőjének) értékét hibának, azaz hibának. mind pedig állandókkal.

A végleges változó és az állandó közötti különbség az, hogy az inicializálást el lehet halasztani:

Ez a késleltetett inicializálás például gyakran használatos változó objektumok létrehozására.

Tehát a konstansokat általában nyilvános, statikus, végleges és azonnal inicializált mezőknek nevezik:

A statikus mező (a statikus módosító) az osztályhoz tartozik, és nem kell létrehoznia az elérni kívánt objektum egy adott példányát:

Megjegyezzük, hogy Java-ban, mint minden C-szerű nyelven, a konstansok neveit általában a LARGE-LETTERS_DELEVANT_SHOW_CODE-ban írják.

Itt érdemes megemlíteni, hogy egy ilyen konstans nem lehet csak szám, hanem teljes értékű kifejezés, amelyben más statikus mezőt is elérhetünk, vagy statikus módszereket hívhatunk meg:

Ugyanakkor minden összeállítódik a fordítási szakaszban, és nem kell a 60 * 60 * 24 helyettesíteni a kevésbé olvasható és nyilvánvaló 86400-at, amelyet már kiszámított (és esetleg hibásan számított).

A konstansok csoportosítása enumokon keresztül

Nagyon gyakran a konstansokat használják több osztályban, és mindent meg akarnak tartani egy modulban. A Java-ban az OOP kényszerül, ezért még mindig meg kell adnia egy osztályt módszerek nélkül, és be kell állítania az összes konstansot. Például a Java elemek módosítóinak állandó osztálya:

Ebben a példában könnyű látni, hogy a konstansok azonos típusúak és korlátozott listájuk; Nincs több módosító Java-ban. Íme néhány ilyen probléma:

  • Írja be a nem biztonságos kifejezést: az a módszer, ahol át szeretné adni a számlálás értékét, átadhatja a számot, nem csak az 1-től 11-ig terjedő értékeket;
  • Nem informatív: például hibakeresés esetén a 3-as érték nem mond semmit. És szeretnék PRIVÁT-t látni;
  • Hiba esetén: pl. Új elem hozzáadásakor vagy a meglévők sorrendjének megváltoztatásakor. Például nem követheted, és a PUBLIC és a VÉDETT helyen ugyanazt az értéket adod meg. A fordító részéről nincs ellenőrzés, csakúgy, mint a konstansok értékének egyediségére, valamint annak lehetőségére, hogy véletlenszerűen hozzárendeljük a változókat azokhoz az értékekhez, amelyek nem felelnek meg ezeknek a konstansoknak.

Az ilyen csoportosított konstansokat enumnak nevezik, és a Java számára számukra van egy speciális enum konstrukció.

Újraírjuk ezt az osztályt felsorolásnak:

És ezt szokásos állandónak is használhatod:

Ne feledje, hogy a számlálást nem egyenrangúan kell összehasonlítani, egyszerűen összehasonlítva a hivatkozással:

Általánosságban meg kell jegyeznünk, hogy a Java ötödik verziója előtt még nem voltak felsorolások, helyettük statikus állandók voltak. Ezzel azt mondom, hogy sok olyan osztály, amellyel találkozol, továbbra is a "nagyapa" módján íródtak. És a standard osztályokban nem változtak meg, például java.awt.Color.

Technikailag a felsorolás egy teljes osztály, amely örököl a java.lang.Enum-ból. azaz A bejegyzés nyilvános enum módosítója megegyezik az absztrakt osztály Modifier kiterjesztésével java.lang.Enum.

És ha ez egy osztály, tetszőleges számú mezőt és módszert vehet fel hozzá:

Ha ezt a példát futtatja, a kimenet nyilvános lesz, és nem 1. Mindegyik enumnak van neve mezője (a mi esetünkben PUBLIC). Újra definiáltuk (@Orride) a toString () metódust, amelybe a kisbetűs nevet adjuk.

Ez különösen megszakítja azoknak az agyát, akik korábban programoztak más programozási nyelveken, amelyekben a számlálások lényegében rendes egész szám konstansokba vannak csoportosítva, azaz. értéktípusok (közvetlen értéket tartalmaznak, és egy értéktípusú változó hozzárendelésekor a hozzárendelt érték egy másolatát hozza létre, ellentétben a referenciális változókkal, ha objektumokra hivatkozik, de nem objektumokat).

Azt is meg kell jegyeznünk, hogy bár a felsorolási osztály nem végleges (vagyis végleges módosító nélkül deklarálható, és örökölheted), nem tudjuk meghosszabbítani az osztályunkat - ez a tilalom a fordító szintjén valósul meg.

Statikus importálás

A számlálások nem minden esetben alkalmazhatók. Például a természetes logaritmus e és az állandó π konstansja nem kombinálható számlálásra. Nézzük az állandó értéket tartalmazó osztályt:

Minden mezője nyilvános statikus végleges. Annak érdekében, hogy ne írja ezeket a módosítót minden egyes alkalommal, sok programozó kijelenti a konstansokat a felületen. mert az összes mezője már nyilvános statikus végleges.

És akkor valaki elképzelte: "Miért írhatok mindig a konstansok teljes nevét, ha meg tudom csinálni és közvetlenül hozzáférni hozzájuk?" És ilyen szerkezetek

ilyen rémálommá változott

A statikus importszerkezet lehetővé teszi a statikus tagokhoz való közvetlen hozzáférést anélkül, hogy az ilyen statikus tagokat tartalmazó típus örökölne. Ehelyett a program egyedileg importálja a tagokat:

vagy a következők mindegyike:

Ha az importált statikus tagot az osztálynév megadásával lehet használni:

Tehát mikor kell statikus importot használni? Csak néhány esetben! Csak akkor használja, ha kényszerül a konstansok helyi példányainak kinyomtatására vagy az öröklés helytelen használatára kényszerül. Más szavakkal, annak használata indokolt, ha egy vagy két másik osztályból állandó jelleggel statikus tagokat kell használni.

Az összes statikus módszer importálása az osztályból részben hátrányos lehet az olvashatósághoz; Ha csak egy vagy két módszerre van szüksége, akkor külön importálja őket. Használt ügyességi, statikus import lehet, hogy a program vizuálisabb, kivéve a program kód nnnoe ismétlések osztály nevét.

Hogyan állapítható meg állandó osztályt?

Ha mindehhez nagyon szükséges, akkor deklarálja az állandó osztályt normális osztályként, nem pedig az interfészt. Csak hogy végleges legyen (végleges), így nem lehet örökölni belőle. És jó lenne absztraktvá tenni, hogy ne hozd létre a példányát, mert minden állandósult statikus, és az objektum a osztályának mezõire hivatkozunk.

következtetés

Amint láthatja, vannak különbségek a Java-konstansok használatában, amelyek nem mindig nyilvánvalóak a kezdőknek. Sajnálatos módon még nem szenteltem ki a beillesztési konstansok témáit, írtam a készletek utánzását a hozzáadás műveletén keresztül +, megmutattam, hogyan készítsek állandó gyűjteményeket (ezt külön cikkben fogom elmondani).

Ne légy lusta, és olvasd el néhány nagyon fontos cikkemet a kezdő programozóknak, diákoknak és junioroknak.
Ne felejts el eljutni az IT Juniors csoporthoz is, ahol megpróbálok linkeket gyűjteni Önnek egyéb hasznos cikkekhez, valamint vállalati kurzusok és szakmai gyakorlatok bejelentéséhez.

Kapcsolódó cikkek