ne peut pas faire une référence statique pour un non méthode statique
Jusqu'à présent j'ai le code suivant:
import java.util.Scanner;
public class HallLanceMemoryCalculator {
private double currentValue;
public static int displayMenu(){
Scanner input=new Scanner(System.in);
int choice=0;
while(choice<1||choice>5){
System.out.println("1.Add");
System.out.println("2.Subtract");
System.out.println("3.Multiply");
System.out.println("4.Divide");
System.out.println("5.Clear");
System.out.println("What would you like to do?");
choice=input.nextInt();
}
return choice;
}
public static double getOperand(String prompt){
Scanner input=new Scanner(System.in);
System.out.println("What is the second number?");
double secondNumber=input.nextDouble();
return secondNumber;
}
public double getCurrentValue(){
return currentValue;
}
public void add(double operand2){
currentValue+=operand2;
}
public void subtract(double operand2){
currentValue-=operand2;
}
public void multiply(double operand2){
currentValue*=operand2;
}
public void divide(double operand2){
currentValue/=operand2;
}
public void clear(){
currentValue=0;
}
public static void main(String[] args) {
double value=getCurrentValue();
}
}
Lorsque je tente de régler double value=getCurrentValue();
à la fin, j'obtiens un message d'erreur "Ne peut pas faire une référence statique pour les non-static method". Il dit que la solution est de faire la getCurrentValue()
méthode statique, mais on m'a dit de ne pas rendre ce champ statique par mon professeur. Est-il une solution simple à ce que je suis en manque?
but I was told not to make that field static by my professor
Et l'alternative est donc...?- Pour plus d'informations sur les références statiques et non statiques membres, vérifiez le côté droit de cette page, sous "Liées".
- Créer une instance. J'aime à le nommer
me
:MyClass me = new MyClass(); double value = me.getCurrentValue();
- Avant que quelqu'un répond à cette question pour vous, ils ont besoin de savoir - savez-vous ce que "statique" signifie réellement? Si vous le faites, la réponse devrait être évidente. Si vous n'avez pas, alors je vous conseille la lecture de vos notes de cours, ou le Java en ligne des tutoriels.
- je suis d'accord avec@DavidWallace. créer une instance et utiliser l'objet pour accéder à des méthodes non statiques ou variables à partir d'un contexte statique.
HallLanceMemoryCalculator c = new HallLanceMemoryCalculator(); double value=c.getCurrentValue();
Vous devez vous connecter pour publier un commentaire.
Une méthode statique appartient à la classe, non méthode statique appartient à un instance de la classe.
Lorsque vous appelez
getCurrentValue()
demain
, vous obtenez un message d'erreur parce quemain
n'est pas associé à une instance.Vous devez créer une instance de la classe:
Ensuite, vous pouvez appeler l'instance
getCurrentValue()
:Statique signifie il y en a pour toute une classe, alors que si elle n'est pas statique, il y en a un pour chaque instance d'une classe (un objet). Afin de faire référence à une non-méthode statique à partir d'un contexte statique, vous devez d'abord créer un objet de cette méthode pour être une partie de. Donc, dans votre méthode main (le contexte statique), vous devez créer un nouveau HallLanceMemoryCalculator objet. Une fois que vous avez l'objet, vous pouvez utiliser des méthodes de l'objet.
La raison que votre professeur ne veux pas qu'il soit statique, est de sorte que vous avez la possibilité d'avoir plusieurs HallLanceMemoryCalculator cas, que chacun de garder une trace de leur propre valeur.
Remarque, je ne suis pas y compris le code, parce que je suis sûr que votre professeur voulez-vous de comprendre la partie sur votre propre.
La Méthode getCurrentValue() est définie comme une ordniary (non statique) la méthode de la classe. Pour l'exécuter, vous avez besoin d'une instance de HallLanceMemoryCalculator.
Donc essayer de les instancier HallLanceMemoryCalculator première:
Afin de faire un certain sens, l'exemple doit avoir un constructeur pour le stockage de la valeur initiale. E. g.
En faisant cela, vous pouvez utiliser les éléments suivants du code principal:
Créer une instance de votre
HallLanceMemoryCalculator
alors appelgetCurrentValue()
ou fairegetCurrentValue()
statique.vous devez utiliser une instance de la classe, et non pas la classe, si vous voulez appeler votre fonction get sans définition de l'attribut
static
.