The cuvânt cheie static în Java este folosit în principal pentru gestionarea memoriei. Cuvântul cheie static în Java este folosit pentru a partaja aceeași variabilă sau metodă a unei clase date. Utilizatorii pot aplica cuvinte cheie statice cu variabile, metode, blocuri și clase imbricate. Cuvântul cheie static aparține clasei decât o instanță a clasei. Cuvântul cheie static este folosit pentru o variabilă constantă sau o metodă care este aceeași pentru fiecare instanță a unei clase.
The static cuvântul cheie este un modificator de non-acces în Java care este aplicabil pentru următoarele:
- Blocuri
- Variabile
- Metode
- Clase
Notă: Pentru a crea un membru static (bloc, variabilă, metodă, clasă imbricată), precedați declarația acestuia cu cuvântul cheie static .
Caracteristicile cuvântului cheie static:
Iată câteva caracteristici ale cuvântului cheie static în Java:
- Alocarea memoriei partajate: Variabilelor și metodelor statice li se alocă spațiu de memorie o singură dată în timpul execuției programului. Acest spațiu de memorie este partajat între toate instanțele clasei, ceea ce face ca membrii statici să fie utili pentru menținerea stării globale sau a funcționalității partajate. Accesibil fără instanțierea obiectului: membrii statici pot fi accesați fără a fi nevoie de a crea o instanță a clasei. Acest lucru le face utile pentru furnizarea de funcții utilitare și constante care pot fi utilizate în întregul program. Asociați cu clasă, nu cu obiecte: membrii statici sunt asociați cu clasa, nu cu obiecte individuale. Aceasta înseamnă că modificările aduse unui membru static sunt reflectate în toate instanțele clasei și că puteți accesa membrii statici folosind numele clasei, mai degrabă decât o referință la obiect. Nu pot accesa membrii nestatici: metodele și variabilele statice nu pot accesa membrii nestatici ai unei clase, deoarece nu sunt asociate cu nicio instanță anume a clasei. Poate fi supraîncărcat, dar nu suprascris: Metodele statice pot fi supraîncărcate, ceea ce înseamnă că puteți defini mai multe metode cu același nume, dar cu parametri diferiți. Cu toate acestea, ele nu pot fi suprascrise, deoarece sunt asociate cu clasa mai degrabă decât cu o anumită instanță a clasei.
Când un membru este declarat static, acesta poate fi accesat înainte ca orice obiect din clasa sa să fie creat și fără referire la niciun obiect. De exemplu, în programul java de mai jos, accesăm metoda statică m1() fără a crea vreun obiect al Test clasă.
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();> > }> }> |
>
>Ieșire
from m1>
Blocuri statice
Dacă trebuie să faceți calculul pentru a vă inițializa variabile statice , puteți declara un bloc static care este executat exact o dată, atunci când clasa este prima încărcată.
Luați în considerare următorul program java care demonstrează utilizarea blocurilor statice.
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);> > }> }> |
>
>Ieșire
Static block initialized. from main Value of a : 10 Value of b : 40>
Pentru un articol detaliat despre blocurile statice, consultați blocurile statice
Variabile statice
Când o variabilă este declarată ca fiind statică, atunci o singură copie a variabilei este creată și partajată între toate obiectele de la nivel de clasă. Variabilele statice sunt, în esență, variabile globale. Toate instanțele clasei au aceeași variabilă statică.
Puncte importante pentru variabilele statice:
- Putem crea variabile statice doar la nivel de clasă. Vezi aici
- Blocul static și variabilele statice sunt executate în ordinea în care sunt prezente într-un program.
Mai jos este programul Java pentru a demonstra că blocurile statice și variabilele statice sunt executate în ordinea în care sunt prezente într-un program.
Java
tu ești îmbinare
// 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'> );> > }> }> |
>
>Ieșire
from m1 Inside static block Value of a : 20 from main>
Metode statice
Când o metodă este declarată cu static cuvânt cheie, este cunoscut ca metoda statică. Cel mai comun exemplu de metodă statică este principal( ) metodă. După cum sa discutat mai sus, orice membru static poate fi accesat înainte ca orice obiect din clasa sa să fie creat și fără referire la niciun obiect. Metodele declarate ca statice au câteva restricții:
- Ei pot apela direct doar alte metode statice.
- Aceștia pot accesa direct doar datele statice.
- Ei nu se pot referi la acest sau super in orice fel.
Mai jos este programul java pentru a demonstra restricțiile privind metodele statice.
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> > }> }> |
>
>
Ieșire:
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>
Când să folosiți variabile și metode statice?
Utilizați variabila statică pentru proprietatea care este comună tuturor obiectelor. De exemplu, în clasă Student, toți studenții au același nume de facultate. Utilizați metode statice pentru modificarea variabilelor statice.
Luați în considerare următorul program java, care ilustrează utilizarea lui static cuvinte cheie cu variabile și metode.
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();> > }> }> |
>
>Ieșire
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Clasele statice
Se poate face o clasă static numai dacă este o clasă imbricată. Nu putem declara o clasă de nivel superior cu un modificator static, dar putem declara clase imbricate ca statice. Astfel de tipuri de clase sunt numite clase statice imbricate. Clasa statică imbricată nu are nevoie de o referință pentru clasa exterioară. În acest caz, o clasă statică nu poate accesa membrii nestatici ai clasei Outer.
Notă: Pentru clasa imbricată statică, consultați a clasă imbricată statică în java
Implementare:
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();> > }> }> |
>
>Ieșire
techcodeview.com>
Iată un exemplu de program Java care demonstrează utilizarea cuvântului cheie static:
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();> > }> }> |
>
>
reporniți mysql ubuntuIeșire
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Avantaje:
- Eficiența memoriei: Membrilor statici li se alocă memorie o singură dată în timpul execuției programului, ceea ce poate duce la economii semnificative de memorie pentru programele mari. Performanță îmbunătățită: Deoarece membrii statici sunt asociați cu clasa mai degrabă decât cu instanțe individuale, aceștia pot fi accesați mai rapid și mai eficient decât membrii nestatici. Accesibilitate globală: membrii statici pot fi accesați de oriunde în program, indiferent dacă a fost creată o instanță a clasei. Încapsularea metodelor utilitare: Metodele statice pot fi utilizate pentru a încapsula funcții utilitare care nu necesită informații de stare de la un obiect. Acest lucru poate îmbunătăți organizarea codului și poate facilita reutilizarea funcțiilor utilitare în mai multe clase. Constante: Variabilele finale statice pot fi utilizate pentru a defini constantele care sunt partajate în întregul program. Funcționalitate la nivel de clasă: metodele statice pot fi utilizate pentru a defini funcționalitatea la nivel de clasă care nu necesită informații de stare de la un obiect, cum ar fi metodele din fabrică sau funcțiile de ajutor.
În general, cuvântul cheie static este un instrument puternic care poate ajuta la îmbunătățirea eficienței și organizării programelor dvs. Java.