可能重复:
在 Java 中的静态方法中调用非静态方法
当我尝试从我的主函数调用涉及已定义对象的方法时,我遇到了“无法从静态上下文引用非静态方法”错误。
我有三个类:Person 类、Book 类和包含主方法的第三类。
现在,我被要求在 main() 中创建四个 Person 实例,并定义一个方法“doesAnybodyWantIt(Book b)”,询问这四个人是否想要这本书。它看起来像这样:doesAnybodyWantIt(Book b){ me.doIwantIt(b); lisa.doIwantIt(b).. with the four person-objects).
所以我担心,javac 不知道四个 Person-objects 存在并引发错误。我知道我可以改为将方法编写为 doesAnybodyWantIt(Book b, Person a, ... ),但这不是我被问到的。
所以我的问题是:有没有办法在不将 Persons 作为参数传递给doesAnybodyWantIt
-method 的情况下绕过这个问题?我试图Person me = new Person(..)
在没有运气的情况下包含在构造函数方法中。
在这种类型的设置中,我想对我知道我将定义的对象做特定的事情,我如何回避错误?
我不确定我是否应该包含原始源代码;所有的方法和参数都被赋予了挪威名字,所以我担心它不会很可读。
非常感谢大家!马吕斯
感谢您的回复!你当然是对的,我必须在这个混乱的问题中包含一些代码。
class Error{
private Person jeg;
public void doesAnybodyWantIt(Bok b){ //This method has to be declaired withink the classm, and can only take the Bok b as a parameter.
Bok bok = jeg.vilJegHaBoka(b);
// loops over the four persons in question.
}
public static void main(String[] args){
Person jeg = new Person("Jeg", "java");
Person lisa = new Person("Lisa", "crime");
Person ramiz = new Person("Ramiz", "food");
Person emil = new Person("Emil", "sports");
doesAnybodyWantIt(new Bok("java"));
}
}
class Bok{
private String kat;
Bok(String k){ //the category of the book is assigned to kat as a string.
kat = k;
}
public String kategori(){return kat;} //returns the category.
}
class Person{
private String navn; //name
// private Person bestevenn; non-relevant
private String bokKat; // The category of books that is at interest to the person.
Person(String navnet, String kat){ //sets the name and category of books.
navn = navnet;
bokKat = kat;
}
private boolean mittInteressefelt(Bok b){ //Tests if the book's category is the same as my interest.
if (bokKat.equals(b.kategori())){ //Returns true if interested. else false.
return true;
}
else{
return false;
}
}
public Bok vilJegHaBoka(Bok b){ //A method to decide if the book will be kept or not. Returns null if i want the book, and the book otherwise.
if (mittInteressefelt(b) == true){ return null; }
else { return b;}
}
}
一个人有一个名字和感兴趣的领域,一本书有一个类别。作业说我应该创建一个方法 vilNoenHaBoka (= doesAnybodyWantTheBook) 循环遍历 main 中创建的四个特定 Person-objects,并询问他们每个人是否想要这本书。它还指出该方法应该看起来像 public void vilNoenHaBoka(Bok b)。现在,我对提出这个明确与作业相关的问题感到非常难过,如果这不合适,请告诉我。然而,我只是想知道解决这个问题的好方法是什么——例如,我应该将 Person-objects 传递给 vilNoenHaBoka() 吗?
再次感谢!