Che cosa significa esattamente “statica” dire quando la dichiarazione di variabili “globali” in Java?

StackOverflow https://stackoverflow.com/questions/3415781

Domanda

Sono stato in esecuzione in questo problema molte volte e non ho mai preso la briga di imparare perché la sua accadendo e imparare ciò che "statiche" significa in realtà. Ho appena applicato il cambiamento che Eclipse ha suggerito e si è trasferito.

public class Member {

 // Global Variables
 int iNumVertices;
 int iNumEdges;

 public static void main(String[] args) {

  // do stuff

  iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

  // do more stuff

 } // main end 
}

Quindi Eclipse mi dice di fare static int iNumVertices; e io non sono sicuro perché. Così che cosa è esattamente "statica", come viene utilizzato, qual è lo scopo di usare "statico", e perché mi dà questo problema?

È stato utile?

Soluzione

Ecco il tuo esempio:

public class Member {

    // Global Variables
    int iNumVertices;
    int iNumEdges;

    public static void main(String[] args) {

        // do stuff

        iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

    }
}

Il metodo main è un metodo statico associato alla classe. Non è associata con un'istanza di Member, quindi non può variabili di accesso che sono associati con un'istanza di Member. La soluzione a questo è non per fare quei campi statici. Invece, è necessario creare un'istanza di Member utilizzando la parola chiave new.

Ecco una versione modificata:

public class Member {
    // Fields
    private int iNumVertices;
    private int iNumEdges;

    public Member(){
        // init the class
    }

    public static void main(String[] args) {
        Member member = new Member();
        member.iNumVertices = 0;
        // do more stuff
    }
}

Alla ricerca di te stesso la creazione di statica globale è un'indicazione a voi che si dovrebbe riflettere attentamente su come si sta progettando qualcosa. Non è sempre sbagliato, ma dovrebbe dire di pensare a quello che stai facendo.

Altri suggerimenti

static le variabili sono quelli che sono condivisi tra tutti gli oggetti di una classe. Qui nel tuo esempio per ogni oggetto di gli si crea, si otterrà gli oggetti che hanno un proprio iNumVertices valori. Quando si utilizza static con una variabile, c'è solo una variabile condivisa tra tutti gli oggetti di gli . static metodi funzionano allo stesso modo - sono condivisi tra tutti gli oggetti.

Da static variabili / metodi sono comuni a tutti gli oggetti, una necessità non fa un oggetto della classe per accedere a queste variabili / metodi.

variabili non statiche come iNumVertices appartengono a un oggetto di una classe. Non è possibile accedere senza creare un oggetto. Così, quando si accede a una variabile non statico da un contesto statico (qui principale metodo), quindi java sarebbe non sapere quale oggetto di iNumVertices che si stanno cercando di accesss. Quindi l'errore.

In entrambi i make iNumVertices statica, o si riferiscono ad essa con la creazione di un oggetto di membro

Member m = new Member();
m.iNumVertices = 0;
learn what "static" actually means

variabile cosa statica in realtà significa che variabile classe sarà uguale per tutte le istanze di quella particolare classe, se si vuole evitare di utilizzare le variabili statiche (che è una buona idea, dal momento che le variabili statiche vengono tenuti in memoria) si può passare valore costruttore trogolo evitando così l'utilizzo di modificatore statico, e ottenere lo stesso effetto (cioè se si passa lo stesso valore alla classe istanziazione).

Ecco esempio di codice:

public class Car{

    private int speed;

    public Car(int speed){
        this.speed = speed;
    }

}

Quindi, si può fare questo quando si crea nuova istanza:

Car car = new Car(100);

ed ogni volta che si crea un'istanza Car avrà velocità di 100, evitando così private static int speed = 100; dichiarazione static

Le variabili statiche sono variabili di classe. Ci sarà una sola copia di quel avaiable variabile a tutte le istanze della classe e saranno condividere quella variabile. I membri statici possono essere utilizzati anche senza riferimento a una specifica istanza della classe.

Maggiori informazioni qui:

http://download.oracle.com/javase/tutorial /java/javaOO/classvars.html

Le variabili statiche non hanno bisogno di avere la classe di creare un'istanza per accedere, quindi se si sta cercando di accedere a un modulo variabile non statica un contesto statico si sta rischiando cercando di accedere a qualcosa che non è stato inizializzato / istanziato .

I metodi statici possono accedere solo le variabili statiche. Ci sono due tipi di variabili in classe. uno è variabili statiche (variabili anche di classe) e altro è variabile istanza. Solo una copia di variabile statica esiste nella memoria ma variabili istanza sarà istanziata per ciascun oggetto. Quindi per variabili statiche tutti gli oggetti accedono alla stessa variabile e qualsiasi cambiamento fatto da un oggetto si rifletteranno ad altri oggetti. La questione qui è il motivo per cui è che i metodi devono essere statico a variabili statiche accesso. Quando si effettua un metodo statico, è possibile accedere al metodo senza istanziare oggetti di quella classe. Quindi, se questo metodo è in grado di accedere variabili di istanza poi per variabili che dell'oggetto dovrebbe fare il cambiamento a? L'altro modo è possibile cioè non metodi statici possono accedere variabili statiche.

Ogni variabile di classe (una variabile dichiarata all'interno del corpo della classe e fuori i corpi dei metodi) utilizzato in un metodo statico deve essere dichiarato statico troppo.

variabili di classe statiche ei metodi sono accessibili fuori quella classe senza la necessità di un'istanza di quella classe.

variabili statiche sono comuni a tutte le istanze di una classe.

Nota: Come detto in precedenza questi sono variabili di classe ossia condivisi da tutte le istanze

.

Si può anche essere chiamato come variabili livello di classe. In genere si definisce costanti (Avrete anche bisogno di parole chiave finale per la definizione delle costanti) e le variabili globali come statica.

Per ulteriori informazioni consultare: http://download.oracle.com/javase/tutorial/java/ javaOO / classvars.html

http://www.roseindia.net/java/beginners/staticvariable.shtml

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top