Question

J'ai couru plusieurs fois dans ce problème et je jamais pris la peine d'apprendre pourquoi sa passe et apprendre ce que « statique » signifie réellement. Je viens appliqué le changement que Eclipse a suggéré et évolué.

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 
}

Alors éclipse me dit de faire static int iNumVertices; et je ne sais pas pourquoi. Alors, quelle est exactement « statique », comment est-il utilisé, quel est le but d'utiliser « statique », et pourquoi est-il me donne ce problème?

Était-ce utile?

La solution

Voici votre exemple:

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

    }
}

La méthode main est une méthode statique associé à la classe. Il est pas associé à une instance de Member, donc il ne peut pas accéder à des variables qui sont associées à une instance de Member. La solution est pas pour les champs statiques. , Vous avez besoin au lieu de créer une instance de Member en utilisant le mot-clé new.

Voici une version modifiée:

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
    }
}

vous trouver la création mondiale est une statics indication pour vous que vous devriez réfléchir à la façon dont vous concevez quelque chose. Ce n'est pas toujours mal, mais il devrait vous dire de penser à ce que vous faites.

Autres conseils

statiques variables sont celles qui sont partagées à tous les objets d'une classe. Ici, dans votre exemple pour tous les objets de Membre vous créez, vous obtiendrez des objets qui ont ses propres iNumVertices valeurs. Lorsque vous utilisez statique avec une variable, il n'y a qu'une seule variable partagée entre tous les objets de Membre . méthodes statiques fonctionnent de la même façon - ils sont partagés entre tous les objets.

Depuis statiques variables / méthodes sont communs à tous les objets, on n'a pas à faire l'objet de la classe pour accéder à ces variables / méthodes.

Les variables non statiques comme iNumVertices appartiennent à un objet d'une classe. Ils ne peuvent pas être accessibles sans créer un objet. Donc, lorsque vous accédez à une variable non statique d'un contexte statique (ici principale méthode), alors java ne saurait pas quel objet de iNumVertices que vous essayez de accesss. D'où l'erreur.

Soit faire iNumVertices statique, ou y faire référence en créant un objet de membre

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

Qu'est-ce que statique signifie réellement cette variable de classe sera de même pour toutes les instances de cette classe particulière, si vous voulez éviter d'utiliser des variables statiques (ce qui est une bonne idée, car les variables statiques sont conservées en mémoire), vous pouvez passer la variable la valeur constructeur de cuvette en évitant ainsi l'utilisation d'un modificateur statique, et obtenir le même effet (à savoir pour passer de la même valeur au moment de l'instanciation classe).

est par exemple de code ici:

public class Car{

    private int speed;

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

}

Vous pouvez le faire lors de la création nouvelle instance:

Car car = new Car(100);

et chaque fois que vous créez par exemple voiture, il aura la vitesse 100, évitant ainsi private static int speed = 100; déclaration statique

Les variables statiques sont des variables de classe. Il y aura une seule copie de cette avaiable variable toutes les instances de la classe et ils partageront cette variable. Les membres statiques peuvent également être utilisés sans faire référence à une instance spécifique de la classe.

Plus d'informations ici:

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

Les variables statiques ne pas besoin d'avoir la classe instancier afin d'accéder, donc si vous essayez d'accéder à une variable non statique forme un contexte statique, vous risquez d'essayer d'accéder à quelque chose qui n'a pas été initialisé / instancié .

Les méthodes statiques peuvent accéder à des variables statiques uniquement. Il existe deux types de variables en classe. on est variables statiques (également des variables de classe) et autre est variable d'instance. Une seule copie de la variable statique existe dans la mémoire, mais les variables d'instance sera instancié pour chaque objet. Donc, pour les variables statiques tous les objets accèdent à la même variable et toute modification apportée par un objet sera reflété à d'autres objets. La question est de savoir pourquoi est que les méthodes doivent être statiques pour accéder aux variables statiques. Lorsque vous effectuez une méthode statique, vous pouvez accéder à la méthode sans instanciation d'objets de cette catégorie. Donc, si cette méthode est en mesure d'accéder à des variables d'instance puis pour les variables de l'objet que devrait-il faire changement? L'autre façon est possible non-à-dire des méthodes statiques peuvent accéder à des variables statiques.

Chaque variable de classe (une variable déclarée dans le corps de la classe et en dehors du corps de la méthode) utilisé dans une méthode statique doit être déclarée trop statique.

variables de classe statiques et les méthodes sont accessibles en dehors de cette classe sans la nécessité d'une instance de cette classe.

variables statiques sont communes à toutes les instances d'une classe.

Note:. Comme dit précédemment ce sont des variables de classe à savoir partagées par toutes les instances

Ceux-ci peuvent également être appelés en tant que variables de niveau de classe. En général, vous définissez Constantes (Vous aurez aussi besoin mot-clé finale pour définir des constantes) et variables globales comme statique.

Pour plus d'informations se réfèrent: http://download.oracle.com/javase/tutorial/java/ javaOO / classvars.html

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top