IL parola chiave statica in Java viene utilizzato principalmente per la gestione della memoria. La parola chiave statica in Java viene utilizzata per condividere la stessa variabile o metodo di una determinata classe. Gli utenti possono applicare parole chiave statiche con variabili, metodi, blocchi e classi annidate. La parola chiave statica appartiene alla classe rispetto a un'istanza della classe. La parola chiave static viene utilizzata per una variabile costante o un metodo uguale per ogni istanza di una classe.
IL statico parola chiave è un modificatore di non accesso in Java applicabile per quanto segue:
- Blocchi
- Variabili
- Metodi
- Classi
Nota: Per creare un membro statico (blocco, variabile, metodo, classe nidificata), precedere la sua dichiarazione con la parola chiave statico .
Caratteristiche della parola chiave statica:
Ecco alcune caratteristiche della parola chiave statica in Java:
- Allocazione della memoria condivisa: alle variabili e ai metodi statici viene allocato lo spazio di memoria solo una volta durante l'esecuzione del programma. Questo spazio di memoria è condiviso tra tutte le istanze della classe, il che rende i membri statici utili per mantenere lo stato globale o la funzionalità condivisa. Accessibile senza creazione di istanze di oggetti: è possibile accedere ai membri statici senza la necessità di creare un'istanza della classe. Ciò li rende utili per fornire funzioni di utilità e costanti che possono essere utilizzate nell'intero programma. Associato alla classe, non agli oggetti: i membri statici sono associati alla classe, non ai singoli oggetti. Ciò significa che le modifiche a un membro statico si riflettono in tutte le istanze della classe e che è possibile accedere ai membri statici utilizzando il nome della classe anziché un riferimento all'oggetto. Impossibile accedere ai membri non statici: i metodi e le variabili statici non possono accedere ai membri non statici di una classe, poiché non sono associati a nessuna particolare istanza della classe. Può essere sovraccaricato, ma non sovrascritto: i metodi statici possono essere sovraccaricati, il che significa che è possibile definire più metodi con lo stesso nome ma parametri diversi. Tuttavia, non possono essere sovrascritti, poiché sono associati alla classe anziché a una particolare istanza della classe.
Quando un membro viene dichiarato statico, è possibile accedervi prima che vengano creati gli oggetti della sua classe e senza riferimento ad alcun oggetto. Ad esempio, nel programma Java riportato di seguito, accediamo al metodo statico m1() senza creare alcun oggetto del Test classe.
Giava
Ciclo for in 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();> >}> }> |
>
>Produzione
from m1>
Blocchi statici
Se è necessario eseguire il calcolo per inizializzare il file variabili statiche , puoi dichiarare un blocco statico che viene eseguito esattamente una volta, quando la classe viene caricata per la prima volta.
Considera il seguente programma Java che dimostra l'uso dei blocchi statici.
Giava
// 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);> >}> }> |
>
>Produzione
Static block initialized. from main Value of a : 10 Value of b : 40>
Per un articolo dettagliato sui blocchi statici, vedere blocchi statici
Variabili statiche
Quando una variabile viene dichiarata statica, viene creata e condivisa una singola copia della variabile tra tutti gli oggetti a livello di classe. Le variabili statiche sono, essenzialmente, variabili globali. Tutte le istanze della classe condividono la stessa variabile statica.
Punti importanti per le variabili statiche:
- Possiamo creare variabili statiche solo a livello di classe. Vedere qui
- il blocco statico e le variabili statiche vengono eseguiti nell'ordine in cui sono presenti in un programma.
Di seguito è riportato il programma Java per dimostrare che il blocco statico e le variabili statiche vengono eseguiti nell'ordine in cui sono presenti in un programma.
Giava
// 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'>);> >}> }> |
>
>Produzione
from m1 Inside static block Value of a : 20 from main>
Metodi statici
Quando un metodo viene dichiarato con il file statico parola chiave, è noto come metodo statico. L'esempio più comune di metodo statico è principale( ) metodo. Come discusso in precedenza, è possibile accedere a qualsiasi membro statico prima che vengano creati gli oggetti della sua classe e senza riferimento ad alcun oggetto. I metodi dichiarati statici hanno diverse restrizioni:
- Possono chiamare direttamente solo altri metodi statici.
- Possono accedere direttamente solo ai dati statici.
- Non possono fare riferimento Questo O super in ogni modo.
Di seguito è riportato il programma Java per dimostrare le restrizioni sui metodi statici.
Giava
// 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> >}> }> |
>
>
Produzione:
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>
Quando utilizzare variabili e metodi statici?
Utilizzare la variabile statica per la proprietà comune a tutti gli oggetti. Ad esempio, nella classe Studente, tutti gli studenti condividono lo stesso nome dell'università. Utilizzare metodi statici per modificare le variabili statiche.
Considera il seguente programma Java, che illustra l'uso di statico parole chiave con variabili e metodi.
Giava
come eseguire uno script
// 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();> >}> }> |
>
>Produzione
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

Classi statiche
È possibile creare una classe statico solo se è una classe nidificata. Non possiamo dichiarare una classe di primo livello con un modificatore statico ma possiamo dichiarare statiche le classi nidificate. Tali tipi di classi sono chiamate classi statiche nidificate. La classe statica nidificata non necessita di un riferimento alla classe esterna. In questo caso, una classe statica non può accedere ai membri non statici della classe Outer.
Nota: Per la classe nidificata statica, vedere a classe nidificata statica in Java
Implementazione:
Giava
// 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();> >}> }> |
>
>
Java che concatena stringheProduzione
techcodeview.com>
Ecco un esempio di programma Java che dimostra l'uso della parola chiave static:
Giava
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();> >}> }> |
>
>Produzione
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Vantaggi:
- Efficienza della memoria: ai membri statici viene allocata memoria solo una volta durante l'esecuzione del programma, il che può comportare un notevole risparmio di memoria per programmi di grandi dimensioni. Prestazioni migliorate: poiché i membri statici sono associati alla classe anziché a singole istanze, è possibile accedervi in modo più rapido ed efficiente rispetto ai membri non statici. Accessibilità globale: è possibile accedere ai membri statici da qualsiasi punto del programma, indipendentemente dal fatto che sia stata creata un'istanza della classe. Incapsulamento di metodi di utilità: i metodi statici possono essere utilizzati per incapsulare funzioni di utilità che non richiedono alcuna informazione sullo stato da un oggetto. Ciò può migliorare l'organizzazione del codice e semplificare il riutilizzo delle funzioni di utilità su più classi. Costanti: le variabili finali statiche possono essere utilizzate per definire costanti condivise nell'intero programma. Funzionalità a livello di classe: i metodi statici possono essere utilizzati per definire funzionalità a livello di classe che non richiedono alcuna informazione sullo stato da un oggetto, come metodi factory o funzioni helper.
Nel complesso, la parola chiave static è un potente strumento che può aiutare a migliorare l'efficienza e l'organizzazione dei tuoi programmi Java.