Vodič za statičku ključnu riječ na Javi

1. Uvod

U ovom ćemo članku istražiti statički detaljno ključna riječ jezika Java. Pronaći ćemo kako možemo primijeniti ključnu riječ statički na varijable, metode, blokove, ugniježđene klase i kakve razlike to čini.

2. Anatomija statički Ključna riječ

U programskom jeziku Java, ključna riječ statički označava da određeni član pripada samom tipu, a ne instanci tog tipa.

To znači da je stvorena samo jedna instanca tog statičnog člana koja se dijeli u svim instancama klase.

Ključna riječ može se primijeniti na varijable, metode, blokove i ugniježđenu klasu.

3. The statički Polja (ili varijable klase)

U Javi, ako je polje proglašeno statički, tada se stvara točno jedna kopija tog polja i dijeli se među svim instancama te klase. Nije važno koliko puta inicijaliziramo klasu; uvijek će postojati samo jedna kopija statički polje koje mu pripada. Vrijednost ovoga statički polje dijelit će se sa svim objektima bilo kojeg istog bilo koje druge klase.

Iz perspektive sjećanja, statičke varijable idu u određeni bazen u JVM memoriji nazvan Metaspace (prije Jave 8 taj se bazen zvao Permanent Generation ili PermGen, koji je u potpunosti uklonjen i zamijenjen Metaspaceom).

3.1. Primjer statički Polje

Pretpostavimo da imamo a Automobil razred s nekoliko atributa (varijable instance). Kad god se novi objekti inicijaliziraju iz ovoga Automobil Nacrt, svaki novi objekt imat će svoju zasebnu kopiju ovih varijabli instance.

Međutim, pretpostavimo da tražimo varijablu koja sadrži broj broja Automobil objekti koji se inicijaliziraju i dijele se u svim instancama tako da im mogu pristupiti i povećati ih nakon njihove inicijalizacije.

To je gdje statički varijable dolaze:

javni razred automobila {naziv privatnog niza; privatni String motor; javni statički int numberOfCars; javni automobil (naziv niza, niz mehanizma) {this.name = name; this.engine = motor; numberOfCars ++; } // geteri i postavljači}

Sada za svaki objekt ove klase koji se inicijalizira, ista kopija datoteke numberOfCars varijabla se povećava. Dakle, za ovaj će slučaj biti istinite sljedeće tvrdnje:

@Test public void whenNumberOfCarObjectsInitialized_thenStaticCounterIncreases () {novi automobil ("Jaguar", "V8"); novi automobil ("Bugatti", "W16"); assertEquals (2, Car.numberOfCars); }

3.2. Uvjerljivi razlozi za upotrebu statički Polja

  • Kada je vrijednost varijable neovisna o objektima
  • Kada bi vrijednost trebala biti podijeljena između svih objekata

3.3. Ključne točke koje treba zapamtiti

  • Od statički varijable pripadaju klasi, može im se pristupiti izravno koristeći ime klase i ne trebaju nikakve reference na objekt
  • statički varijable se mogu deklarirati samo na razini klase
  • statički poljima se može pristupiti bez inicijalizacije objekta
  • Iako možemo pristupiti statički polja koja koriste referencu na objekt (poput ford.numberOfCars ++), trebali bismo se suzdržati od njegove upotrebe jer u ovom slučaju postaje teško shvatiti radi li se o varijabli instance ili varijabli klase; umjesto toga, uvijek bismo se trebali pozivati ​​na statički varijable koje koriste naziv klase (na primjer, u ovom slučaju, Car.numberOfCars ++)

4. The statički Metode (ili metode klase)

Slično statički polja, statički metode također pripadaju klasi umjesto objekta i tako se mogu pozivati ​​bez stvaranja objekta klase u kojoj borave. Namijenjeni su korištenju bez stvaranja objekata klase.

4.1. Primjer statički Metoda

statički metode se obično koriste za izvođenje operacije koja ne ovisi o stvaranju instance.

Ako postoji kôd koji bi trebao biti podijeljen u svim instancama te klase, tada ga napišite u statički metoda:

javna statička praznina setNumberOfCars (int numberOfCars) {Car.numberOfCars = numberOfCars; }

statički metode se također široko koriste za stvaranje korisnih ili pomoćnih klasa, tako da se mogu dobiti bez stvaranja novog objekta tih klasa.

Dovoljno je pogledati klase komunalnih kolekcija ili matematike iz JDK-a, StringUtils iz Apache-a ili CollectionUtils iz Spring okvira i primijetite da su sve metode statički.

4.2. Uvjerljivi razlozi za upotrebu statički Metode

  • Pristup / manipulacija statičkim varijablama i drugim statičkim metodama koje ne ovise o objektima
  • statički metode se široko koriste u korisnim te pomoćnim razredima

4.3. Ključne točke koje treba zapamtiti

  • statički metode u Javi rješavaju se u vrijeme kompajliranja. Budući da je nadjačavanje metode dio runtime polimorfizma, pa se statičke metode ne mogu nadjačati
  • apstraktne metode ne mogu biti statične
  • statički metode ne mogu koristiti ovaj ili super ključne riječi
  • Sljedeće kombinacije instance, metode klase i varijable su valjane:
    1. Instance metode mogu izravno pristupiti i metodama instance i varijablama instance
    2. Također mogu pristupiti i instance instance statički varijable i statički metode izravno
    3. statički metode mogu pristupiti svima statički varijable i drugo statički metode
    4. statički metode ne mogu izravno pristupiti varijablama instance i metodama instance; za to im treba neka referenca objekta

5. A statički Blok

A statički blok služi za inicijalizaciju statički varijable. Iako statički varijable se mogu inicijalizirati izravno tijekom deklaracije, postoje situacije kada se od nas traži obrada više linija.

U takvim slučajevima, statički blokovi dobro dođu.

Ako statički varijable zahtijevaju dodatnu logiku s više iskaza tijekom inicijalizacije, a zatim statički blok se može koristiti.

5.1. The statički Primjer bloka

Pretpostavimo da želimo inicijalizirati objekt popisa s nekim unaprijed definiranim vrijednostima.

Ovo postaje lako s statički blokovi:

javna klasa StaticBlockDemo {javni statički popis rangira = novi LinkedList (); static {rank.add ("poručnik"); rank.add ("kapetan"); rank.add ("Major"); } static {rank.add ("Pukovnik"); rank.add ("General"); }}

U ovom primjeru ne bi bilo moguće inicijalizirati Popis objekt sa svim početnim vrijednostima zajedno s deklaracijom; i zato smo koristili statički blokiraj ovdje.

5.2. Uvjerljivi razlozi za upotrebu statički Blokovi

  • Ako je inicijalizacija statički varijable zahtijeva dodatnu logiku, osim dodjele
  • Ako je inicijalizacija statičkih varijabli sklona pogreškama i zahtijeva rukovanje iznimkama

5.3. Ključne točke koje treba zapamtiti

  • Razred može imati više statički blokovi
  • statički polja i statički blokovi se rješavaju i izvršavaju istim redoslijedom kojim su prisutni u klasi

6. A statički Razred

Java programski jezik omogućuje nam stvaranje klase u klasi. Pruža uvjerljiv način grupiranja elemenata koji će se koristiti samo na jednom mjestu, što pomaže održati naš kôd organiziranijim i čitljivijim.

Ugniježđena arhitektura klase podijeljena je na dvije:

  • ugniježđene klase koje su deklarirane statički se zovu statički ugniježđene klase dok,
  • ugniježđene klase koje nisustatički se zovu unutarnja nastava

Glavna razlika između ove dvije je u tome što unutarnje klase imaju pristup svim članovima zatvorene klase (uključujući private), dok statički ugniježđene klase imaju pristup samo statičkim članovima vanjske klase.

Zapravo, statički ugnježđene klase ponašale su se točno poput bilo koje druge klase najviše razine, ali zatvorene u jedinu klasu koja će joj pristupiti, kako bi se osigurala bolja praktičnost pakiranja.

6.1. Primjer statički Razred

Najčešće korišten pristup stvaranju jednobojnih objekata je kroz statički ugniježđena klasa je da ne zahtijeva nikakvu sinkronizaciju i da ju je lako naučiti i implementirati:

javna klasa Singleton {private Singleton () {} private static class SingletonHolder {public static final Singleton instance = new Singleton (); } javni statički Singleton getInstance () {return SingletonHolder.instance; }}

6.2. Neophodni razlozi za upotrebu a statički Unutarnja klasa

  • Grupiranje klasa koje će se koristiti samo na jednom mjestu povećava enkapsulaciju
  • Kôd se približava mjestu koje će ga koristiti samo jedno; ovo povećava čitljivost i kôd je održiviji
  • Ako ugniježđena klasa ne zahtijeva pristup svom okruženju članova klase instance, onda je bolje to prijaviti kao statički jer na ovaj način neće biti povezan s vanjskom klasom i stoga će biti optimalniji jer im neće biti potrebna gomila ili hrpa memorije

6.3. Ključne točke koje treba zapamtiti

  • statički ugniježđene klase nemaju pristup nijednom članu instance zatvorene vanjske klase; može im pristupiti samo putem reference objekta
  • statičke ugniježđene klase mogu pristupiti svim statičkim članovima zatvorene klase, uključujući privatne
  • Specifikacija Java programiranja ne dopušta nam da deklariramo klasu najviše razine kao statički; samo klase unutar klasa (ugniježđene klase) mogu se napraviti kao statički

7. Zaključak

U ovom smo članku vidjeli statički ključna riječ u akciji. Također smo pročitali o razlozima i prednostima korištenja statičkih polja, statičkih metoda, statičkih blokova i statičkih unutarnjih klasa.

Kao i uvijek, cjelovit kod možemo pronaći na GitHubu.