2012-05-04 10 views

risposta

7

Non credo che sia una domanda facile a cui rispondere perché significa qualcosa di leggermente diverso in base alla lingua. Se dovessi inserirla nei termini più generali che probabilmente cambieranno selvaggiamente da persona a persona:

Una variabile statica è una variabile condivisa tra tutte le istanze di una classe.

Un metodo statico è un metodo che può essere chiamato su una classe e in genere non richiede l'istanza della classe.

Ancora una volta, se dovessi scegliere tre lingue diverse, darei tre risposte diverse.

Wikipedia potrebbe anche aiutare un po 'a definire queste cose.

http://en.wikipedia.org/wiki/Method_(computer_programming) http://en.wikipedia.org/wiki/Static_variable

+0

Sto parlando di Java in particolare. – WAMoz56

15

In Java, static denota class methods e classe variabili (contrariamente ai metodi di istanza e variabili di istanza). È possibile accedere a questi metodi e variabili senza presentare un'istanza.

Contrastare ciò con i metodi di istanza e le variabili di istanza: è necessario accedervi tramite un oggetto. Ad esempio, length() opera su un oggetto:

String a = "hello"; 
int len = a.length(); 

Al contrario, valueOf non può operare su un oggetto; inoltre, esso crea un nuovo oggetto quando viene chiamato:

String x = String.valueOf(123.45); 

noti come metodi di istanza sono chiamati usando <objectName> seguito da un punto ., mentre i metodi statici sono accessibili usando <className> seguito da un punto ..

6

La parola chiave "statica" può confondere perché in C, dove è stata originata, ha più significati. Quando viene utilizzato per dichiarare una variabile in una funzione, significa che la variabile ha una durata al di fuori della funzione. È essenzialmente un globale che è privato della funzione. Se una variabile globale è statica, è essenzialmente privata di quel file sorgente. In entrambi i casi, la variabile ha una singola posizione di memoria, proprio come un globale. È solo che il compilatore ti impedisce di accedervi sia al di fuori della funzione o dell'unità di compilazione.

Suppongo che la parola "statico" sia stata utilizzata come posizione di una variabile statica che non cambia mai, al contrario di una normale variabile locale, che avrà una posizione di memoria da qualche parte sulla pila a seconda di come appariva la pila quando la funzione è stata chiamata.

Quando C++ è stato creato, questa parola chiave è stata riutilizzata per fare riferimento a proprietà e metodi a livello di classe. Presumo che il pensiero fosse che un metodo statico o una proprietà era una sorta di globale che era privato della classe. Se si pensa a come sono disposti in memoria, ha un certo senso in quanto una proprietà statica avrà un singolo indirizzo proprio come una variabile globale. L'unica differenza è che il compilatore non ti permette di usarlo al di fuori della classe.

Poiché Java (e altri linguaggi) ha una sintassi ispirata al linguaggio C++, viene utilizzato anche "statico" per riferirsi ai metodi e alle proprietà delle classi. È spiacevole, perché l'uso di questa parola chiave ha poca relazione con il significato inglese.

Ma in generale, questo è il modo di guardarlo. Nella maggior parte delle lingue, se è "statico", ce n'è solo uno nell'intero programma. Pensala come qualcosa con un unico indirizzo di memoria fisso.

1

variabile statica è variabile utilizzata da tutte le istanze di una classe in cui, come nelle variabili normali, la variabile viene nuovamente inizializzata. I metodi statici possono avere un significato chiamarli senza nemmeno creare un oggetto.

1

Mostrerò esempi per capire chiaramente i metodi statici.

Quando si immettono dati da Java tastiera utilizza classe Scanner

ex; Scanner scn = new Scanner (System.in); int a = scn.nextInt();

Ciò significa che il metodo nextInt() non è statico.

Il metodo statico è il metodo che può essere utilizzato senza creare un'istanza di una classe.

Guardate il seguente esempio:

public class Calculate { 

    static void calculatePower(int num, int pow) { 
     System.out.println(Math.pow(num, pow)); 
    } 


} 

Uso del metodo statico.

public static void main(String[] args) { 
    Calculate.calculatePower(2,8); 
} 

così non abbiamo istanziati classe Calcolare e il metodo utilizzato calculatePower che è statico

Problemi correlati