6
votes

Quelle est la bonne façon d'accéder aux champs statiques en Java?

Je viens de commencer à apprendre Java et j'ai écrit une classe à tester avec des champs statiques. Tout fonctionne bien, mais dans Eclipse, je vois une icône qui, lorsqu'elle est planée en vient comme suit: "La méthode statique getcounter du type Carcounter devrait être accessible de manière statique forte>". Quelle est la bonne façon alors?

Voici la classe: p> xxx pré>

et voici où j'essaie d'accéder à un compteur variable: P>

public class CarCounterTest {
    public static void main( String args[] ){
        CarCounter a = new CarCounter();
        System.out.println(a.getCounter()); //This is where the icon is marked
    }
}


0 commentaires

6 Réponses :


8
votes

Ce serait:

System.out.println(CarCounter.getCounter());


0 commentaires

17
votes

Les champs statiques et les méthodes n'appartiennent pas à un objet spécifique, mais à une classe, vous devez donc les accéder à partir de la classe, et non à partir d'un objet: xxx

et non xxx


3 commentaires

remplacer besoin par devrait car les deux lignes de code sont correctes mais que la seconde est découragée


Cela a répondu pour moi; Votre réponse était courte en même temps concise. Incroyable!


@BinyAMIN SHARET Je sais que c'était une question plus ancienne mais votre commentaire m'a aidé à travers mon projet. Merci!



17
votes

Utiliser carcounter.getcounter () . Cela indique clairement que ce n'est rien à voir avec l'objet que la valeur de la variable fait référence à - le compteur est associé au type lui-même, plutôt que n'importe quelle instance spécifique du type.

Voici un Exemple de la raison pour laquelle il est vraiment important: xxx

Qu'est-ce que c'est look comme ce code fait? On dirait qu'il commence à démarrer un nouveau fil, puis de "faire une pause" en quelque sorte - l'envoyer à dormir pendant une seconde.

En fait, il commence un nouveau fil et faisant la pause de la actuelle Fil, car thread.sleep est une méthode statique qui toujours rend le fil de sommeil actuel. Il ne peut pas faire du dormir d'autre fil. C'est beaucoup plus clair lorsqu'il est explicite: xxx

Fondamentalement, la capacité du premier extrait de code à compiler est une erreur de la part des concepteurs de langue: (


1 commentaires

C # Designers a corrigé cette erreur.



0
votes

Les éléments statiques appartiennent à la classe. Par conséquent, le meilleur moyen d'y accéder est via la classe. Donc, dans votre cas, l'impression devrait être.

// CarCounterTest.java
public class CarCounterTest {
    public static void main( String args[] ){
        VehicleCounter vehicle1 = new VehicleCounter();
        VehicleCounter vehicle2 = new CarCounter();
        System.out.println(VehicleCounter.getCounter());
        System.out.println(CarCounter    .getCounter());
    }
}


0 commentaires

2
votes

Il est même possible, bien que très découragé, d'écrire:

Math m = null;
double d = m.sin(m.PI/4.0);
System.out.println("This should be close to 0.5 " + (d*d));


0 commentaires

0
votes

Les membres statiques doivent être accessibles de manière statique, c'est-à-dire de classer.Membername. L'accès non statique est autorisé mais (objectename.membername) mais est découragé.


0 commentaires