non méthode statique ne peut pas être référencé à partir d'un contexte statique
J'aimerais comprendre une fois pour toutes.
Avec cette s'il vous plaît excuser la masse de code collé ci-dessous, mais je ne veux pas quitter les détails.
La seule chose que j'ai changé l'URL de chargement. Mais ce n'est pas la cause de l'erreur.
Je voudrais appeler ma fonction "readPosiitons". Solution facile, de le rendre statique. Véritable solution, je n'en suis pas sûr.
Merci de m'aider à mieux comprendre comment résoudre cette erreur dans le bon sens.
Merci!!
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package PandL;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Scanner;
import toolBox.Secretary;
import toolBox.Secretary.positionObj;
/**
*
* @author Jason
*
*/
public class GarageComm {
public static void main(String[] args) throws MalformedURLException, IOException{
String retStr;
String startM;
String endM;
String myURL;
String[] Split1=null;
Integer lnCount;
HashMap hashPos=new HashMap();
hashPos= readPositions("holdingsBU.txt");//the error is here
myURL="http://myUrl?s=";
URL url = new URL(myURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
in.close();
}
public HashMap readPositions(String destFile){
HashMap<String, Secretary.positionObj> hashPositions=new HashMap<String,positionObj>();
Secretary mySecretary=new Secretary();
try{
File F=new File(destFile);
if(F.exists()){
System.out.println("File Exists: "+F.exists());
System.out.println(destFile);
Scanner sC= new Scanner(F);
while (sC.hasNext()){
String[] Splitter1;
Secretary.positionObj position=mySecretary.new positionObj();
Splitter1=sC.nextLine().split(",");
position.positionDate=Double.parseDouble(Splitter1[0]);
position.positionTicker=(Splitter1[1]);
position.positionOpen=Double.parseDouble(Splitter1[2]);
position.positionPrice=Double.parseDouble(Splitter1[3]);
position.positionSMA=Double.parseDouble(Splitter1[4]);
position.positionUpdated=Double.parseDouble(Splitter1[5]);
position.priceUpdated=Double.parseDouble(Splitter1[6]);
position.updateDate=Double.parseDouble(Splitter1[7]);
hashPositions.put(position.positionTicker.trim(), position);
}
}else{
System.out.println("File Created: "+ F.createNewFile());
System.out.println("----No previous positions----");
}
}catch (Exception E){
System.err.println(destFile + " does not exist.");
hashPositions.put("ERROR", null);
E.printStackTrace();
}
return hashPositions;
}
}
Demandez-vous à pourquoi vous avez à déclarer
static
?
OriginalL'auteur jason m | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
Vraie solution? Ne pas mettre autant de choses dans la
main()
méthode. C'est pour les noobs.Java est un langage orienté-objet. Mettre de la logique dans les méthodes associées à l'
GarageComm
classe.main()
devrait faire un peu plus que d'instancier une instance et appeler ses méthodes.Le modifier comme ceci:
OriginalL'auteur duffymo
C'est un typique torve-esprit pour les nouveaux programmeurs Java.
Un
static
méthode n'appartient pas à un objet. Un non-static
méthode appartient à un objet.Vous utilisez le
main
la méthode de la convention d'avoir votre programme a commencé, et il est nécessaire que cette méthode doit être statique.L'astuce pour obtenir à partir d'une
static
méthode à un non-static
méthode, c'est que vous devez créer un objet de sorte que vous pouvez appeler la méthode. I. e.new GarageComm().readPositions(...)
. Je ne pense pas que vous avez ici, de sorte qu'il serait plus simple de se contenter de marquer readPositions comme trop statique.OriginalL'auteur Thorbjørn Ravn Andersen
Vous avez besoin pour faire de votre fonction statique:
La création d'une instance de GarageComm serait trop de travail, mais c'est une mauvaise programmation en Java, car cet objet n'a pas d'état.
Quelle est la différence entre une mauvaise pratique et mal fait la solution? Je ne comprends pas ce que tu veux dire...
Une mauvaise pratique est quelque chose que l'on conseille à quelqu'un qui est un bon programmeur pour ramasser. Cela semble être une personne qui est en train d'apprendre comment code, parce que cela devrait être facile d'erreur pour corriger quelqu'un qui sait Java. Donc, mon conseil serait de simplement le faire fonctionner, même si le design n'est pas parfait. Le Design est une compétence que vous développer une fois que vous êtes à l'aise avec la syntaxe. Cette personne n'est pas au point.
Ewww... je crois indiquant une bonne pratique pour un débutant est la meilleure façon de le soutenir. J'ai fourni une solution pour le faire fonctionner avant de les conseils. Mais ok, je suppose que nous sommes en désaccord ici...
Certains objets peuvent (et devraient) être apatride, nous allons donc en désaccord sur ce point. Nous ne sommes pas en désaccord tant sur la façon d'aider les débutants autant que vous semblez le penser. Si vous avez lu ma réponse, là encore, vous allez voir qu'il y a d'autres plats à emporter: "Ne pas mettre autant de choses dans la méthode main ()" et "de mettre de la logique dans la GarageComm classe."
OriginalL'auteur Jérôme Verstrynge
Si une méthode n'est pas statique, il doit être appelé "sur" un objet. Lors de l'appel de méthode à partir d'un non méthode statique, cet objet est implicite-c'est l'objet de la première méthode a été appelée sur. Mais lors de l'appel à partir d'une méthode statique, il n'est pas implicite de l'objet, afin d'appeler la méthode, vous devez fournir un objet:
Depuis
GarageComm
n'a pas d'état de son propre, il n'y a pas de raison de créer unGarageComm
objet, il est donc tout aussi bien vous marquer la méthode statique, donc pas d'objet est requise pour l'appeler.stupide faute de frappe, fixe.
OriginalL'auteur Ernest Friedman-Hill
C'est une bonne idée dans ce cas à faire de la méthode statique. L'autre façon est d'utiliser des
à la place.
Alors, pourquoi cette erreur?
Une méthode statique ne peut pas appeler un non-méthode statique dans la même classe. Ça sonne bizarre, mais il y a une raison pour cela. Considérez ceci:
Non des méthodes statiques peut dépendent de l'état des objets, la variable d'instance à dire.
Méthodes statiques peuvent être appelées à partir de hors-bord, sans instanciating
Maintenant, si nous permettons à des méthodes statiques pour jouer avec non méthode statique (et non des variables statiques), ils pourrait échouer. Donc, c'est une sorte de prévention.
Quand dois-je envisager de faire une méthode statique?
Maintenant, venez, pourquoi ne pas faire la méthode
static
?,Très bien, vous devriez faire une méthode statique si c'est la fonctionnalité ne dépend pas de l'état de l'objet.
Si il utilise simplement les paramètres passés et statique pour animaux (variable statique, des méthodes statiques) et des rendements (avec/sans conséquence, jetant exception de rien), considérez méthode statique.
mise à jour: ressemblait à ce post confus d'un couple de personnes donc mis à jour la réponse.
OriginalL'auteur Nishant