La parola chiave static viene utilizzata per costruire metodi che esisteranno indipendentemente dal fatto che vengano generate o meno istanze della classe. Qualsiasi metodo che utilizza la parola chiave static viene definito metodo statico.
Caratteristiche del metodo statico:
- Un metodo statico in Java è un metodo che fa parte di una classe anziché un'istanza di quella classe.
- Ogni istanza di una classe ha accesso al metodo.
- I metodi statici hanno accesso alle variabili della classe (variabili statiche) senza utilizzare l'oggetto della classe (istanza).
- È possibile accedere solo ai dati statici con un metodo statico. Non è in grado di accedere a dati che non siano statici (variabili di istanza).
- Sia nei metodi statici che non statici, è possibile accedere direttamente ai metodi statici.
Sintassi per dichiarare il metodo statico:
Access_modifier static void methodName() { // Method body. }> Il nome della classe può essere utilizzato per invocare o accedere a metodi statici.
Sintassi per chiamare un metodo statico:
className.methodName();>
Esempio 1: il metodo statico non ha accesso alla variabile di istanza
La JVM esegue prima il metodo statico, seguito dalla creazione di istanze di classe. Perché nessun oggetto è accessibile quando viene utilizzato il metodo statico. Un metodo statico non ha accesso alle variabili di istanza. Di conseguenza, un metodo statico non può accedere alla variabile di istanza di una classe.
Giava
// Java program to demonstrate that> // The static method does not have> // access to the instance variable> > import> java.io.*;> > public> class> GFG {> >// static variable> >static> int> a =>40>;> > >// instance variable> >int> b =>50>;> > >void> simpleDisplay()> >{> >System.out.println(a);> >System.out.println(b);> >}> > >// Declaration of a static method.> >static> void> staticDisplay()> >{> >System.out.println(a);> >}> > >// main method> >public> static> void> main(String[] args)> >{> >GFG obj =>new> GFG();> >obj.simpleDisplay();> > >// Calling static method.> >staticDisplay();> >}> }> |
differenza tra azienda e azienda
>
>Produzione
40 50 40>
Esempio 2: sia nei metodi statici che non statici, si accede direttamente ai metodi statici.
Giava
// Java program to demonstrate that> // In both static and non-static methods,> // static methods are directly accessed.> > import> java.io.*;> > public> class> StaticExample {> > >static> int> num =>100>;> >static> String str =>'GeeksForGeeks'>;> > >// This is Static method> >static> void> display()> >{> >System.out.println(>'static number is '> + num);> >System.out.println(>'static string is '> + str);> >}> > >// non-static method> >void> nonstatic()> >{> >// our static method can accessed> >// in non static method> >display();> >}> > >// main method> >public> static> void> main(String args[])> >{> >StaticExample obj =>new> StaticExample();> > >// This is object to call non static function> >obj.nonstatic();> > >// static method can called> >// directly without an object> >display();> >}> }> |
pseudocodice Java
>
>Produzione
static number is 100 static string is GeeksForGeeks static number is 100 static string is GeeksForGeeks>
Perché utilizzare metodi statici?
- Per accedere e modificare variabili statiche e altri metodi statici non basati su oggetti.
- Le classi di utilità e di assistenza utilizzano spesso metodi statici.
Restrizioni nei metodi statici:
- I membri dati non statici o i metodi non statici non possono essere utilizzati dai metodi statici e i metodi statici non possono chiamare direttamente metodi non statici.
- In un ambiente statico, non è consentito utilizzare this e super.
Perché è il metodo principale in Java statico?
È perché non è necessario chiamare un metodo statico per l'oggetto. Se fosse una funzione non statica, JVM creerebbe prima un oggetto prima di chiamare il metodo main(), con conseguente ulteriore difficoltà di allocazione della memoria.
Differenza tra il metodo statico e il metodo di istanza
| Metodi di istanza | Metodi statici |
|---|---|
| Richiede un oggetto della classe. | Non richiede un oggetto della classe. |
| Può accedere a tutti gli attributi di una classe. | Può accedere solo all'attributo statico di una classe. |
| È possibile accedere ai metodi solo utilizzando il riferimento all'oggetto. | Al metodo si accede solo tramite il nome della classe. |
| Sintassi: Objref.nomemetodo() | Sintassi: nomeclasse.nomemetodo() |
| È un esempio di programmazione pass-by-value. | È un esempio di programmazione pass-by-reference. |