what is static keyword java
Ta vadnica razlaga statično ključno besedo v Javi in njeno uporabo v spremenljivkah, metodah, blokih in razredih. Navaja tudi razliko med statičnimi in nestatičnimi člani:
Java podpira različne vrste deklaracij, ki označujejo obseg in vedenje svojih spremenljivk, metod, razredov itd. Na primer, ključna beseda končna, zaprta, statična itd. Vse te izjave imajo določen pomen, kadar se uporabljajo v programu Java.
Vse te ključne besede bomo raziskali v nadaljevanju te vadnice. Tu bomo razpravljali o podrobnostih ene najpomembnejših ključnih besed v Javi, tj. 'Statične'.
Kaj se boste naučili:
- Statična ključna beseda v Javi
- Zaključek
Statična ključna beseda v Javi
Član v programu Java je mogoče razglasiti za statičnega z uporabo ključne besede 'static' pred njegovo izjavo / definicijo. Ko je član razglašen za statičnega, to v bistvu pomeni, da ga član delijo vsi primerki razreda, ne da bi kopirali primerek.
Tako je static nerazredni modifikator, ki se uporablja v Javi in ga je mogoče uporabiti za naslednje člane:
- Spremenljivke
- Metode
- Bloki
- Predavanja (natančneje ugnezdeni razredi)
Ko je član razglašen za statičnega, je do njega mogoče dostopati brez uporabe predmeta. To pomeni, da je statični član aktiven in dostopen pred instanco razreda. Za razliko od drugih nestatičnih članov razreda, ki prenehajo obstajati, ko objekt razreda izstopi iz obsega, je statični član še vedno očitno aktiven.
Statična spremenljivka v Javi
Spremenljivka člana razreda, ki je razglašena za statično, se imenuje statična spremenljivka. Imenuje se tudi kot 'spremenljivka razreda'. Ko je spremenljivka razglašena za statično, se pomnilnik dodeli le enkrat in ne vsakič, ko se razred ustvari. Tako lahko do statične spremenljivke dostopate brez sklicevanja na objekt.
Naslednji program Java prikazuje uporabo statičnih spremenljivk:
class Main { // static variables a and b static int a = 10; static int b; static void printStatic() { a = a /2; b = a; System.out.println('printStatic::Value of a : '+a + ' Value of b : '+b); } public static void main(String() args) { printStatic(); b = a*5; a++; System.out.println('main::Value of a : '+a + ' Value of b : '+b); } } Izhod:

V zgornjem programu imamo dve statični spremenljivki, to sta a in b. Te spremenljivke spremenimo v funkciji “printStatic” in tudi v “main”. Upoštevajte, da se vrednosti teh statičnih spremenljivk ohranijo v funkcijah, tudi ko se obseg funkcije konča. Izhod prikazuje vrednosti spremenljivk v dveh funkcijah.
Zakaj potrebujemo statične spremenljivke in kje so uporabne?
Statične spremenljivke so najbolj uporabne v aplikacijah, ki potrebujejo števce. Kot veste, bodo števci dali napačne vrednosti, če so razglašeni za običajne spremenljivke.
Na primer, če imate v aplikaciji, ki ima razred, recimo avto, nastavljeno običajno števko kot števec. Potem, kadar koli ustvarimo avtomobilski objekt, se običajna spremenljivka števca inicializira z vsakim primerkom. Če pa imamo spremenljivko števca kot statično spremenljivko ali spremenljivko razreda, se bo pri ustvarjanju razreda inicializirala le enkrat.
Kasneje se bo pri vseh primerkih razreda ta števec povečal za eno. To je za razliko od običajne spremenljivke, pri kateri se bo števec z vsakim primerkom povečeval, vendar bo vrednost števca vedno 1.
Torej, tudi če ustvarite sto predmetov avtomobila razreda, bo števec kot običajna spremenljivka vedno imel vrednost 1, medtem ko bo s statično spremenljivko prikazal pravilno število 100.
Spodaj je še en primer statičnih števcev v Javi:
class Counter { static int count=0;//will get memory only once and retain its value Counter() { count++;//incrementing the value of static variable System.out.println(count); } } class Main { public static void main(String args()) { System.out.println('Values of static counter:'); Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } } Izhod:

Delovanje statične spremenljivke je razvidno iz zgornjega programa. Deklarirali smo število statičnih spremenljivk z začetno vrednostjo 0. Nato v konstruktorju razreda povečamo statično spremenljivko.
V glavni funkciji ustvarimo tri predmete števca razredov. Izhod prikazuje vrednost statične spremenljivke vsakič, ko je ustvarjen objekt števca. Vidimo, da se z vsakim ustvarjenim objektom obstoječa vrednost statične spremenljivke poveča in ne inicializira.
Java statična metoda
Metoda v Javi je statična, če je pred njo ključna beseda 'static'.
Nekaj točk, ki si jih morate zapomniti pri statični metodi, so:
seznam vohunskih aplikacij za android
- Statična metoda pripada razredu v primerjavi z drugimi ne-statičnimi metodami, ki se prikličejo z uporabo primerka razreda.
- Če želite priklicati statično metodo, ne potrebujete predmeta razreda.
- Statični podatkovni člani razreda so dostopni statični metodi. Statična metoda lahko celo spremeni vrednosti člana statičnega podatka.
- Statična metoda se ne more sklicevati na „ta“ ali „super“ člane. Tudi če jih skuša statična metoda napotiti, gre za napako prevajalnika.
- Tako kot statični podatki lahko tudi statična metoda pokliče druge statične metode.
- Statična metoda se ne more sklicevati na nestatične člane podatkov ali spremenljivke in tudi ne more priklicati nestatičnih metod.
Naslednji program prikazuje izvajanje statične metode v Javi:
class Main { // static method static void static_method() { System.out.println('Static method in Java...called without any object'); } public static void main(String() args) { static_method(); } } Izhod:

To je preprosta ilustracija. Določimo statično metodo, ki preprosto natisne sporočilo. Nato se v glavni funkciji pokliče statična metoda brez predmeta ali primerka razreda.
Še en primer izvedbe statične ključne besede v Javi.
class Main { // static variable static int count_static = 5; // instance variable int b = 10; // static method static void printStatic() { count_static = 20; System.out.println('static method printStatic'); // b = 20; // compilation error 'error: non-static variable b cannot be referenced from a static context' //inst_print(); // compilation error 'non-static method inst_print() cannot be referenced from a static //context' //System.out.println(super.count_static); // compiler error 'non-static variable super cannot be //referenced from a static context' } // instance method void inst_print() { System.out.println('instance method inst_print'); } public static void main(String() args) { printStatic(); } } Kot vidite, imamo v zgornjem programu dve metodi. Metoda printStatic je statična metoda, medtem ko je inst_print metoda primerka. Imamo tudi dve spremenljivki, static_count je statična spremenljivka in b je spremenljivka primerka.
Pri statični metodi - printStatic najprej prikažemo sporočilo, nato pa poskušamo spremeniti vrednost spremenljivke primerka b in pokličemo tudi nestatično metodo.
youtube v mp3 pretvornik brezplačno varno
Nato poskusimo uporabiti ključno besedo „super“.
b = 20;
inst_print ();
System.out.println (super.count_static);
Ko zaženemo program z zgornjimi vrsticami, dobimo napake pri prevajanju za uporabo spremenljivk primerka, klicanje nestatičnih metod in sklicevanje super v statičnem kontekstu. To so omejitve statične metode.
Ko komentiramo zgornje tri vrstice, šele potem zgornji program deluje v redu in daje naslednje rezultate.
Izhod:
Preobremenitev in razveljavitev statične metode
Kot vsi veste, sta preobremenitev in preglasitev značilnosti OOPS in pomagata pri polimorfizmu. Preobremenitev lahko razvrstimo med polimorfizem časa prevajanja, pri čemer imamo lahko metode z istim imenom, vendar z različnimi seznami parametrov.
Preglasitev je značilnost polimorfizma med izvajanjem in pri tem je metoda osnovnega razreda v izpeljanem razredu preglašena, tako da je podpis metode ali prototip enak, vendar se definicija razlikuje.
Pogovorimo se o tem, kako preobremenitev in razveljavitev vplivata na statični razred v Javi.
Preobremenitev
Statično metodo v Javi lahko preobremenite z različnimi seznami parametrov, vendar z istim imenom.
Naslednji program prikazuje preobremenitev:
public class Main { public static void static_method() { System.out.println('static_method called '); } public static void static_method(String msg) { System.out.println('static_method(string) called with ' + msg); } public static void main(String args()) { static_method(); static_method('Hello, World!!'); } } Izhod:

Ta program ima dve statični metodi z istim imenom 'static_method', vendar z različnim seznamom argumentov. Prva metoda ne sprejme nobenega argumenta, druga metoda pa argument niza.
Pomembno je omeniti, da metode ne morete preobremeniti zgolj glede na ključno besedo 'static'. Na primer, če imate metodo primerka 'sum' in če določite drugo metodo 'sum' in jo razglasite kot statično, potem ne bo delovala. Ta poskus preobremenitve na podlagi 'statične' ključne besede bo povzročil neuspešno prevajanje.
Preglasitev
Ker se statične metode prikličejo brez kakršnega koli predmeta razreda, tudi če imate v izpeljanem razredu statično metodo z enakim podpisom, ne bo prevladala. To je zato, ker brez primerka ni polimorfizma med izvajanjem.
Zato ne morete preglasiti statične metode. Če pa v izvedenem razredu sploh obstaja statična metoda z enakim podpisom, potem metoda, ki jo je treba priklicati, ni odvisna od predmetov v času izvajanja, ampak od prevajalnika.
Upoštevati morate, da čeprav statičnih metod ni mogoče preglasiti, jezik Java ne daje nobenih napak prevajalnika, če imate v izpeljanem razredu metodo z enakim podpisom kot metoda osnovnega razreda.
Naslednja izvedba to dokazuje.
classBase_Class { // Static method in base class which will be hidden in substatic_displayclass public static void static_display() { System.out.println('Base_Class::static_display'); } } classDerived_Class extends Base_Class { public static void static_display() { System.out.println('Derived_Class::static_display'); } } public class Main { public static void main(String args( )) { Base_Class obj1 = new Base_Class(); Base_Class obj2 = new Derived_Class(); Derived_Class obj3 = new Derived_Class(); obj1.static_display(); obj2.static_display(); obj3.static_display(); } } Izhod:

V zgornjem programu lahko vidite, da priklicana statična metoda ni odvisna od tega, na kateri predmet kaže kazalec. To je zato, ker se predmeti sploh ne uporabljajo s statičnimi metodami.
Statični blok v Javi
Tako kot imate funkcionalne bloke v programskih jezikih, kot so C ++, C # itd., Tudi v Javi obstaja tudi poseben blok, imenovan 'statični' blok, ki običajno vključuje blok kode, povezan s statičnimi podatki.
Ta statični blok se izvede v trenutku, ko je ustvarjen prvi objekt razreda (natančno v času nalaganja razredov) ali kadar je uporabljen statični član znotraj bloka.
Naslednji program prikazuje uporabo statičnega bloka.
class Main { static int sum = 0; static int val1 = 5; static int val2; // static block static { sum = val1 + val2; System.out.println('In static block, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); val2 = val1 * 3; sum = val1 + val2; } public static void main(String() args) { System.out.println('In main function, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); } } Izhod:

Upoštevajte vrstni red izvrševanja stavkov v zgornjem programu. Vsebina statičnega bloka se najprej izvede, sledi glavni program. Statični spremenljivki sum in val1 imata začetni vrednosti, medtem ko val2 ni inicializiran (privzeto je 0). Nato v statičnem bloku val2 še vedno ni dodeljena vrednosti, zato je njegova vrednost prikazana kot 0.
Spremenljivki val2 se po tiskanju v statičnem bloku dodeli vrednost in se vsota ponovno izračuna. Zato v glavni funkciji dobimo različne vrednosti vsote in val2.
Če podate konstruktor, se vsebina statičnega bloka izvede še pred konstruktorjem. Statični bloki se večinoma uporabljajo za inicializacijo statičnih članov razreda in druge inicializacije, povezane s statičnimi člani.
Statični razred Java
V Javi imate statične bloke, statične metode in celo statične spremenljivke. Zato je očitno, da imate lahko tudi statične razrede. V Javi je mogoče v drugem razredu imeti razred, ki se imenuje ugnezdeni razred. Razred, ki obdaja ugnezdeni razred, se imenuje zunanji razred.
V Javi, čeprav lahko ugnezdeni razred razglasite za statičnega, zunanjega razreda ni mogoče imeti za statičnega.
Poglejmo zdaj statične ugnezdene razrede v Javi.
Statični ugnezdeni razred v Javi
Kot smo že omenili, lahko ugnezdeni razred v Javi razglasite za statičnega. Statični ugnezdeni razred se v nekaterih vidikih, kot so navedeni spodaj, razlikuje od nestatičnega ugnezdenega razreda (notranji razred).
Za razliko od nestatičnega ugnezdenega razreda ugnezdeni statični razred ne potrebuje zunanje reference sklica.
Statični ugnezdeni razred lahko dostopa samo do statičnih članov zunanjega razreda v primerjavi z nestatičnimi razredi, ki lahko dostopajo tako do statičnih kot tudi do nestatičnih članov zunanjega razreda.
Primer statičnega ugnezdenega razreda je podan spodaj.
class Main{ private static String str = 'SoftwareTestingHelp'; //Static nested class static class NestedClass{ //non-static method public void display() { System.out.println('Static string in OuterClass: ' + str); } } public static void main(String args()) { Main.NestedClassobj = new Main.NestedClass(); obj.display(); } } Izhod:

V zgornjem programu vidite, da lahko statični ugnezdeni razred dostopa do statične spremenljivke (niza) iz zunanjega razreda.
Statični uvoz v Javi
Kot veste, v program Java običajno vključimo različne pakete in vnaprej določene funkcije z uporabo direktive “import”. Uporaba besede static z direktivo o uvozu vam omogoča uporabo funkcije razreda brez uporabe razreda.
Primer:
import static java.lang.System.*; class Main { public static void main(String() args) { //here we import System class using static, hence we can directly use functionality out.println('demonstrating static import'); } } Izhod:

V tem programu uporabljamo statični uvoz za razred java.lang.System.
Opomba: V glavni funkciji smo pravkar uporabili out.println za prikaz sporočila.
Čeprav funkcija statičnega uvoza naredi kodo bolj jedrnato in berljivo, včasih ustvarja dvoumnost, zlasti kadar imajo nekateri paketi enake funkcije. Zato je treba statični uvoz uporabljati le, kadar je to izredno potrebno.
brezplačna aplikacija za razporejanje objav v instagramu
Statično vs nestatično
Pogovorimo se o glavnih razlikah med statičnimi in nestatičnimi člani Jave.
Spodaj so navedene razlike med Statične in nestatične spremenljivke .
| Statične spremenljivke | Nestatične spremenljivke |
|---|---|
| Do njega je mogoče dostopati samo z imenom razreda. | Za dostop zahteva predmete razreda. |
| So dostopni tako statičnim kot tudi nestatičnim metodam. | So dostopne samo nestatičnim metodam. |
| Spomin za statično spremenljivko je dodeljen samo enkrat na razred. | Na objekt je dodeljen pomnilnik za nestatične spremenljivke. |
| V skupni rabi z vsemi predmeti razreda. | Naredi se kopija spremenljivke na objekt. |
| Ima globalni obseg in je na voljo vsem metodam in blokom. | Ima lokalni obseg in je viden predmetom razreda. |
Spodaj je prikazana razlika med statičnimi in nestatičnimi metodami .
| Statične metode | Nestatične metode |
|---|---|
| Metoda, pred katero je statična ključna beseda in je na voljo na ravni razreda. | Metoda, pred katero ni statična ključna beseda in je na voljo za vsak primerek razreda. |
| Podpira čas prevajanja ali zgodnjo vezavo. | Podpira čas izvajanja ali dinamično vezavo. |
| Lahko dostopa samo do statičnih podatkov članov svojega razreda in katerega koli drugega razreda. | Lahko dostopa tako do statičnih kot tudi do nestatičnih članov razreda in drugih razredov. |
| Statičnih metod ni mogoče preglasiti. | Lahko preglasi. |
| Pomnilnik je dodeljen samo enkrat. Zato je porabljenega pomnilnika manj. | Poraba pomnilnika je večja, saj se pomnilnik dodeli vsakič, ko se metoda prikliče. |
Statična vs končna
Static in Final sta dve ključni besedi v Javi, ki lahko data poseben pomen entiteti, s katero se uporablja. Na primer, ko je spremenljivka razglašena za statično, postane spremenljivka razreda, do katere je mogoče dostopati brez sklicevanja na objekt.
Podobno, ko je spremenljivka razglašena za končno, postane nespremenljiva, tj. Konstanta.
Oglejmo si nekaj glavnih razlik med ključnimi besedami Static in Final v Javi.
| Statično | Končno |
|---|---|
| Statični podatkovni član (ugnezdeni razred, spremenljivka ali metoda) je podatkovni član, pred katerim stoji statična ključna beseda in je do njega mogoče dostopati brez predmeta. | Končno ključno besedo lahko uporabite za spremenljivko, metodo, razred itd. in nalaga omejitve subjektom. |
| Ni obvezno inicializirati statične spremenljivke z vrednostjo med deklaracijo. | Končna spremenljivka mora biti inicializirana na vrednost ob deklaraciji |
| Statične spremenljivke lahko ponovno inicializirate. | Končne spremenljivke ni mogoče ponovno inicializirati. |
| Statične metode so tiste, ki lahko dostopajo samo do statičnih članov. | Končne metode so metode, ki jih ni mogoče podedovati / razveljaviti. |
| Statični razredi so razredi, katerih predmetov ni mogoče ustvariti. | Končni razredi so razredi, ki jih ni mogoče podedovati. |
Pogosto zastavljena vprašanja
V # 1) Ali je lahko razred Java statičen?
Odgovor: Da, razred v Javi je lahko statičen, če ni zunanji razred. To pomeni, da so lahko vgnezdeni razredi v Javi statični.
V # 2) Kdaj naj uporabim Static v Javi?
Odgovor: Kadar koli želite v svojem programu podatkovnega člana, ki bi moral ohraniti svojo vrednost med predmeti, uporabite statično. Na primer, števec. Metodo lahko razglasite za statično, če je ne želite priklicati s pomočjo predmeta.
V # 3) Ali ima lahko statični razred konstruktor?
Odgovor: Da, statični razred ima lahko konstruktor, njegov namen pa je samo inicializacija statičnih podatkovnih članov. Klicana bo le prvič, ko bodo dostopni člani podatkov. Za poznejši dostop ne bo poklican.
V # 4) Kakšna je uporaba Statičnega konstruktorja?
Odgovor: Konstruktor se na splošno uporablja za inicializacijo članov statičnih podatkov. Uporablja se tudi za izvajanje operacij / dejanj, ki jih je treba izvesti samo enkrat.
V # 5) Ali so statične metode podedovane v Javi?
Odgovor: Da, statične metode v Javi so podedovane, vendar jih ni mogoče razveljaviti.
Zaključek
V tej vadnici smo podrobno obravnavali statično ključno besedo Java skupaj z njeno uporabo v podatkovnih članih, metodah, blokih in razredih. Ključna beseda static je ključna beseda, ki se uporablja za označevanje ravni razreda ali globalnega obsega.
Ni vam treba dostopati do statičnih članov s primerki razreda. Do članov statičnih podatkov lahko neposredno dostopate z imenom razreda. Razpravljali smo tudi o glavnih razlikah med statičnimi in nestatičnimi člani, pa tudi o statičnih in končnih ključnih besedah.
V naslednjih temah bomo raziskali več ključnih besed in njihov pomen v jeziku Java.
Priporočeno branje
- Statično v C ++
- Vadnica Java vmesnika in abstraktnega razreda s primeri
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- Navidezni stroj Java: kako JVM pomaga pri zagonu aplikacije Java
- Koncepti C #: konstruktor, destruktor, statični razred, struktura in enum
- Dostopni modifikatorji v Javi - Vadnica s primeri
- Vadnica za odsev Java s primeri
- Uvod v programski jezik Java - Video vadnica
