In questo articolo impareremo i metodi statici e i metodi di istanza in Java.
Metodi di istanza Java
I metodi di istanza sono metodi che richiedono la creazione di un oggetto della sua classe prima di poter essere chiamato. Per invocare un metodo di istanza, dobbiamo creare un oggetto della classe in cui è definito il metodo.
public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.>
Metodo di allocazione della memoria dell'istanza
Questi metodi stessi sono archiviati nello spazio di generazione permanente dell'heap (valido solo fino a Java 7, ora sostituito con metaspazio da Java 8 in poi con efficienza migliorata) ma i parametri (argomenti passati loro) e le loro variabili locali e il valore da essere restituiti vengono allocati nello stack. Possono essere chiamati all'interno della stessa classe in cui risiedono o da classi diverse definite nello stesso pacchetto o in altri pacchetti a seconda del tipo di accesso fornito al metodo di istanza desiderato.
Punti importanti:
- I metodi di istanza appartengono all'oggetto della classe, non alla classe, ovvero possono essere chiamati dopo aver creato l'oggetto della classe.
- I metodi delle istanze non vengono archiviati caso per caso, anche con i metodi virtuali. Sono archiviati in un'unica posizione di memoria e sanno solo a quale oggetto appartengono perché questo puntatore viene passato quando li chiami.
- Possono essere sovrascritti poiché vengono risolti utilizzando legame dinamico in fase di esecuzione.
Di seguito è riportata l'implementazione dell'accesso al metodo dell'istanza:
Giava
// Example to illustrate accessing the instance method .> import> java.io.*;> class> Foo {> > String name => ''> ;> > // Instance method to be called within the> > // same class or from a another class defined> > // in the same package or in different package.> > public> void> geek(String name) {> this> .name = name; }> }> class> GFG {> > public> static> void> main(String[] args)> > {> > // create an instance of the class.> > Foo ob => new> Foo();> > // calling an instance method in the class 'Foo'.> > ob.geek(> 'techcodeview.com'> );> > System.out.println(ob.name);> > }> }> |
>
>Produzione
techcodeview.com>
Metodi statici Java
I metodi statici sono i metodi in Java che possono essere chiamati senza creare un oggetto di classe. Sono referenziati da nome della classe stessa o riferimento all'oggetto di quella classe.
public static void geek(String name) { // code to be executed.... } // Must have static modifier in their declaration. // Return type can be int, float, String or user defined data type.>
Allocazione della memoria dei metodi statici
Vengono archiviati nello spazio heap di generazione permanente poiché sono associati alla classe in cui risiedono e non agli oggetti di quella classe. Ma le loro variabili locali e gli argomenti loro passati sono memorizzati nello stack. Poiché appartengono alla classe, possono essere richiamati senza creare l'oggetto della classe.
Punti importanti:
- I metodi statici sono associati alla classe in cui risiedono, ovvero vengono chiamati senza creare un'istanza della classe, ovvero NomeClasse.NomeMetodo(argomenti) .
- Sono progettati con l'obiettivo di essere condivisi tra tutti gli oggetti creati dalla stessa classe.
- I metodi statici non possono essere sovrascritti, poiché vengono risolti utilizzando legame statico dal compilatore in fase di compilazione. Tuttavia, possiamo dichiarare metodi con lo stesso nome statico in entrambe superclasse E sottoclasse , ma verrà chiamato Metodo Nascondere poiché il metodo della classe derivata nasconderà il metodo della classe base.
Di seguito è riportata l'illustrazione dell'accesso ai metodi statici:
Giava
// Example to illustrate Accessing> // the Static method(s) of the class.> import> java.io.*;> class> Geek {> > public> static> String geekName => ''> ;> > public> static> void> geek(String name)> > {> > geekName = name;> > }> }> class> GFG {> > public> static> void> main(String[] args)> > {> > // Accessing the static method geek()> > // and field by class name itself.> > Geek.geek(> 'vaibhav'> );> > System.out.println(Geek.geekName);> > // Accessing the static method geek()> > // by using Object's reference.> > Geek obj => new> Geek();> > obj.geek(> 'mohit'> );> > System.out.println(obj.geekName);> > }> }> |
>
>Produzione
data dell'utilità Java
vaibhav mohit>
Nota:
Vengono archiviate le variabili statiche e i relativi valori (primitive o riferimenti) definiti nella classe PermGen spazio della memoria.
Domande frequenti
1. Cosa succede se la variabile statica si riferisce a un oggetto?
static int i = 1; static Object obj = new Object();>Nella prima riga, il valore 1 verrebbe memorizzato nella sezione PermGen. Nella seconda riga, l'obj di riferimento verrebbe archiviato nella sezione PermGen e l'oggetto a cui fa riferimento verrebbe archiviato nella sezione heap.
2. Quando utilizzare metodi statici?
- Quando disponi di codice che può essere condiviso tra tutte le istanze della stessa classe, inserisci quella parte di codice nel metodo statico.
- Sono fondamentalmente utilizzati per accedere ai campi statici della classe.
3. Differenza tra il metodo dell'istanza e il metodo statico
- Il metodo di istanza può accedere direttamente ai metodi di istanza e alle variabili di istanza.
- Il metodo di istanza può accedere direttamente alle variabili statiche e ai metodi statici.
- I metodi statici possono accedere direttamente alle variabili statiche e ai metodi statici.
- I metodi statici non possono accedere direttamente ai metodi di istanza e alle variabili di istanza. Devono utilizzare il riferimento all'oggetto. E il metodo statico non può essere utilizzato Questo parola chiave poiché non esiste un'istanza per 'questo' a cui fare riferimento.