The statinis raktinis žodis Java daugiausia naudojamas atminties valdymui. „Java“ statinis raktinis žodis naudojamas dalintis tuo pačiu tam tikros klasės kintamuoju arba metodu. Vartotojai gali taikyti statinius raktinius žodžius su kintamaisiais, metodais, blokais ir įdėtomis klasėmis. Statinis raktinis žodis priklauso klasei nei klasės egzempliorius. Statinis raktinis žodis naudojamas pastoviam kintamajam arba metodui, kuris yra vienodas kiekvienam klasės egzemplioriui.
The statinis raktinis žodis yra „Java“ prieigos modifikatorius, taikomas šiems tikslams:
- Blokai
- Kintamieji
- Metodai
- Klasės
Pastaba: Norėdami sukurti statinį narį (bloką, kintamąjį, metodą, įdėtą klasę), prieš jo deklaraciją įveskite raktinį žodį statinis .
Statinio raktinio žodžio charakteristikos:
Štai keletas statinio raktinio žodžio „Java“ ypatybių:
- Bendros atminties paskirstymas : statiniams kintamiesiems ir metodams vietos atmintyje paskirstoma tik vieną kartą programos vykdymo metu. Ši atminties vieta yra bendrai naudojama visiems klasės egzemplioriams, todėl statiniai nariai yra naudingi palaikant visuotinę būseną arba bendrai naudojamas funkcijas. Prieinama be objekto egzempliorių: statinius narius galima pasiekti nekuriant klasės egzemplioriaus. Dėl to jie naudingi teikiant paslaugų funkcijas ir konstantas, kurias galima naudoti visoje programoje. Susieti su klase, o ne su objektais: statiniai nariai yra susieti su klase, o ne su atskirais objektais. Tai reiškia, kad statinio nario pakeitimai atsispindi visuose klasės egzemplioriuose, o statinius narius galite pasiekti naudodami klasės pavadinimą, o ne objekto nuorodą. Negalima pasiekti nestatinių narių: statiniai metodai ir kintamieji negali pasiekti nestatinių klasės narių, nes jie nėra susieti su jokiu konkrečiu klasės egzemplioriumi. Galima perkrauti, bet nepaisyti : Statiniai metodai gali būti perkrauti, o tai reiškia, kad galite apibrėžti kelis metodus tuo pačiu pavadinimu, bet skirtingais parametrais. Tačiau jų negalima nepaisyti, nes jie yra susieti su klase, o ne su konkrečiu klasės egzemplioriumi.
Kai narys paskelbiamas statiniu, jį galima pasiekti prieš sukuriant bet kokius jo klasės objektus ir be nuorodos į jokį objektą. Pavyzdžiui, toliau pateiktoje „Java“ programoje pasiekiame statinį metodą m1() nesukuriant jokio objekto Testas klasė.
Java
// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> > // static method> > static> void> m1()> > {> > System.out.println(> 'from m1'> );> > }> > public> static> void> main(String[] args)> > {> > // calling m1 without creating> > // any object of class Test> > m1();> > }> }> |
>
>Išvestis
from m1>
Statiniai blokai
Jei jums reikia atlikti skaičiavimą, kad inicijuotų savo statiniai kintamieji , galite deklaruoti statinį bloką, kuris bus vykdomas tiksliai vieną kartą, kai pirmą kartą įkeliama klasė.
Apsvarstykite šią „Java“ programą, rodančią statinių blokų naudojimą.
Java
poeilutės eilutė java
// Java program to demonstrate use of static blocks> class> Test> {> > // static variable> > static> int> a => 10> ;> > static> int> b;> > > // static block> > static> {> > System.out.println(> 'Static block initialized.'> );> > b = a *> 4> ;> > }> > public> static> void> main(String[] args)> > {> > System.out.println(> 'from main'> );> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'Value of b : '> +b);> > }> }> |
>
>Išvestis
Static block initialized. from main Value of a : 10 Value of b : 40>
Išsamų straipsnį apie statinius blokus rasite statiniai blokai
Statiniai kintamieji
Kai kintamasis deklaruojamas kaip statinis, sukuriama viena kintamojo kopija ir dalijamasi tarp visų objektų klasės lygiu. Statiniai kintamieji iš esmės yra pasauliniai kintamieji. Visi klasės egzemplioriai turi tą patį statinį kintamąjį.
data konvertuoti į eilutę
Svarbūs statinių kintamųjų punktai:
- Statinius kintamuosius galime kurti tik klasės lygiu. Pasižiūrėk čia
- statiniai blokai ir statiniai kintamieji vykdomi tokia tvarka, kokia jie yra programoje.
Žemiau yra „Java“ programa, rodanti, kad statiniai blokai ir statiniai kintamieji vykdomi tokia tvarka, kokia jie yra programoje.
Java
// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> > // static variable> > static> int> a = m1();> > > // static block> > static> {> > System.out.println(> 'Inside static block'> );> > }> > > // static method> > static> int> m1() {> > System.out.println(> 'from m1'> );> > return> 20> ;> > }> > > // static method(main !!)> > public> static> void> main(String[] args)> > {> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'from main'> );> > }> }> |
>
>Išvestis
from m1 Inside static block Value of a : 20 from main>
Statiniai metodai
Kai metodas deklaruojamas su statinis raktinį žodį, jis žinomas kaip statinis metodas. Dažniausias statinio metodo pavyzdys yra pagrindinis ( ) metodas. Kaip aptarta aukščiau, bet kurį statinį narį galima pasiekti prieš sukuriant jo klasės objektus ir be nuorodos į jokį objektą. Metodai, paskelbti kaip statiniai, turi keletą apribojimų:
- Jie gali tik tiesiogiai iškviesti kitus statinius metodus.
- Jie gali tiesiogiai pasiekti tik statinius duomenis.
- Jie negali remtis tai arba super bet kokiu būdu.
Žemiau yra „Java“ programa, skirta parodyti statinių metodų apribojimus.
Java
// Java program to demonstrate restriction on static methods> class> Test> {> > // static variable> > static> int> a => 10> ;> > > // instance variable> > int> b => 20> ;> > > // static method> > static> void> m1()> > {> > a => 20> ;> > System.out.println(> 'from m1'> );> > > // Cannot make a static reference to the non-static field b> > b => 10> ;> // compilation error> > > // Cannot make a static reference to the> > // non-static method m2() from the type Test> > m2();> // compilation error> > > // Cannot use super in a static context> > System.out.println(> super> .a);> // compiler error> > }> > > // instance method> > void> m2()> > {> > System.out.println(> 'from m2'> );> > }> > > > > public> static> void> main(String[] args)> > {> > // main method> > }> }> |
>
>
Išvestis:
pakeisti eilutę java
prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>
Kada naudoti statinius kintamuosius ir metodus?
Naudokite statinį kintamąjį savybei, kuri yra bendra visiems objektams. Pavyzdžiui, klasėje Studentas visi studentai turi tą patį koledžo pavadinimą. Statiniams kintamiesiems keisti naudokite statinius metodus.
Apsvarstykite šią „Java“ programą, kuri iliustruoja naudojimą statinis raktažodžiai su kintamaisiais ir metodais.
Java
// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> > String name;> > int> rollNo;> > // static variable> > static> String cllgName;> > // static counter to set unique roll no> > static> int> counter => 0> ;> > public> Student(String name)> > {> > this> .name = name;> > this> .rollNo = setRollNo();> > }> > // getting unique rollNo> > // through static variable(counter)> > static> int> setRollNo()> > {> > counter++;> > return> counter;> > }> > // static method> > static> void> setCllg(String name) { cllgName = name; }> > // instance method> > void> getStudentInfo()> > {> > System.out.println(> 'name : '> +> this> .name);> > System.out.println(> 'rollNo : '> +> this> .rollNo);> > // accessing static variable> > System.out.println(> 'cllgName : '> + cllgName);> > }> }> // Driver class> public> class> StaticDemo {> > public> static> void> main(String[] args)> > {> > // calling static method> > // without instantiating Student class> > Student.setCllg(> 'XYZ'> );> > Student s1 => new> Student(> 'Alice'> );> > Student s2 => new> Student(> 'Bob'> );> > s1.getStudentInfo();> > s2.getStudentInfo();> > }> }> |
>
>Išvestis
linux komandos, kurios
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Statinės klasės
Galima sukurti klasę statinis tik jei tai yra įdėta klasė. Negalime paskelbti aukščiausio lygio klasės su statiniu modifikatoriumi, bet galime paskelbti įdėtas klases kaip statines. Tokie klasių tipai vadinami įdėtomis statinėmis klasėmis. Įdėtai statinei klasei nereikia išorinės klasės nuorodos. Šiuo atveju statinė klasė negali pasiekti nestatinių išorinės klasės narių.
Pastaba: Dėl statinės įdėtos klasės žr. a statinė įdėta klasė Java
Įgyvendinimas:
Java
// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> > private> static> String str => 'techcodeview.com'> ;> > // Static class> > static> class> MyNestedClass {> > > // non-static method> > public> void> disp(){> > System.out.println(str);> > }> > }> > > public> static> void> main(String args[])> > {> > GFG.MyNestedClass obj> > => new> GFG.MyNestedClass();> > obj.disp();> > }> }> |
>
>
mesti išimties tvarkymą javaIšvestis
techcodeview.com>
Štai „Java“ programos pavyzdys, rodantis statinio raktinio žodžio naudojimą:
Java
public> class> ExampleClass {> > public> static> int> count => 0> ;> > public> int> id;> > public> ExampleClass() {> > count++;> > id = count;> > }> > public> static> void> printCount() {> > System.out.println(> 'Number of instances: '> + count);> > }> > public> void> printId() {> > System.out.println(> 'Instance ID: '> + id);> > }> > public> static> void> main(String[] args) {> > ExampleClass e1 => new> ExampleClass();> > ExampleClass e2 => new> ExampleClass();> > ExampleClass e3 => new> ExampleClass();> > e1.printId();> > e2.printId();> > e3.printId();> > ExampleClass.printCount();> > }> }> |
>
>Išvestis
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Privalumai:
- Atminties efektyvumas: statiniams nariams atmintis priskiriama tik vieną kartą programos vykdymo metu, todėl didelėms programoms gali sutaupyti daug atminties. Patobulintas našumas: kadangi statiniai nariai yra susieti su klase, o ne su atskirais egzemplioriais, juos galima pasiekti greičiau ir efektyviau nei nestatinius narius. Visuotinis prieinamumas: statinius narius galima pasiekti iš bet kurios programos vietos, nepaisant to, ar buvo sukurtas klasės egzempliorius. Naudingumo metodų inkapsuliavimas: statiniai metodai gali būti naudojami naudingumo funkcijoms, kurioms nereikia jokios būsenos informacijos iš objekto, įtraukti. Tai gali pagerinti kodo organizavimą ir palengvinti naudingų paslaugų funkcijų naudojimą keliose klasėse. Konstantos: statiniai galutiniai kintamieji gali būti naudojami norint apibrėžti konstantas, kurios yra bendrinamos visoje programoje. Klasės lygio funkcionalumas: statiniai metodai gali būti naudojami norint apibrėžti klasės lygio funkcijas, kurioms iš objekto nereikia jokios būsenos informacijos, pvz., gamyklinių metodų ar pagalbinių funkcijų.
Apskritai statinis raktinis žodis yra galingas įrankis, galintis padėti pagerinti „Java“ programų efektyvumą ir organizavimą.