2012-03-19 33 views
6

Perché è possibile accedere a una variabile statica dall'oggetto in Java, come il seguente codice?Accesso alla variabile statica dall'oggetto in Java

public class Static { 
    private static String x = "Static variable"; 

    public static void main(String[] args) 
    { 
    Static member = new Static(); 
    System.out.println(member.x); 
    } 
} 
+1

Perché no? Hai una ragione per cui pensi che non dovrebbe essere possibile? – EJP

+1

Puoi anche fare Static.x non c'è bisogno di creare un oggetto. – nikhil

+0

IIRC, Josh Bloch ha detto che consentire questa è stata una decisione sbagliata. –

risposta

8

In genere, le variabili pubbliche sono accessibili a tutti e alle variabili private è possibile accedere solo dall'istanza corrente della classe. Nell'esempio è possibile accedere alla variabile x dal metodo main, poiché tale metodo si trova nella classe Static.

Se ti stai chiedendo perché sei autorizzato ad accedervi da un'altra istanza di una classe statica rispetto a quella in cui ti trovi attualmente (che in genere non è consentito per le variabili private), è semplicemente perché le variabili statiche non lo fanno Esistono su una base per istanza, ma su una base per classe. Ciò significa che è possibile accedere alla stessa variabile statica di A da tutte le istanze di A.

In caso contrario, nessuno sarebbe in grado di accedere alla variabile statica privata, poiché non appartiene a un'istanza, ma tutte.

1

variabili statiche sono altrimenti chiamate come variabili di classe, perché sono disponibili per ogni oggetto di quella classe.

Come membro è un oggetto della classe Statico, quindi è possibile accedere a tutte le variabili statiche come wll come non statiche della classe statica tramite oggetto membro.

+2

Non risponde alla domanda, non che ci sia una risposta. – EJP

2

Non è consigliabile fare riferimento a una variabile statica in questo modo.

Tuttavia, la tua domanda era: perché è consentito? Direi che la risposta è che uno sviluppatore può cambiare un membro di istanza (campo o variabile) in un membro statico senza dover cambiare tutti i riferimenti a quel membro.

Ciò è particolarmente vero negli ambienti multi-sviluppatore. Altrimenti il ​​tuo codice potrebbe non riuscire a compilare solo perché il tuo partner ha modificato alcune variabili di istanza in variabili statiche.

0

Il membro non statico è membro di istanza. Il membro statico (di classe) non ha potuto accedere ai membri dell'istanza perché, non esiste un modo per determinare quale istanza possiede membri specifici non statici.

L'oggetto istanza può sempre fare riferimento a membri statici in quanto appartiene a una classe globale (condivisa) alle sue istanze.

Problemi correlati