Java 无法在静态上下文中引用非静态方法

Java 无法在静态上下文中引用非静态方法,java,Java,我四处研究,似乎仍然无法解决这个问题。我的计划中包含以下内容: public void InsertDB(double price, double shares, String ticker, int id)throws Exception { //do some stuff } 我在我的主类中尝试了以下操作(并得到上面的错误:无法在静态上下文中引用非静态方法): 然后我读到您必须创建一个新实例,所以我尝试了(Testingground是我的程序名),但我收到一个错误,说它找

我四处研究,似乎仍然无法解决这个问题。我的计划中包含以下内容:

   public void InsertDB(double price, double shares, String ticker, int id)throws Exception {
   //do some stuff
   }
我在我的主类中尝试了以下操作(并得到上面的错误:无法在静态上下文中引用非静态方法):

然后我读到您必须创建一个新实例,所以我尝试了(Testingground是我的程序名),但我收到一个错误,说它找不到InsertDB符号:

Testingground myObject = new InsertDB();
我是java新手,继承了这个程序(我的程序没有这个问题),有人能告诉我怎么做才能让它工作以及它背后的逻辑吗。我还读到,如果我将
public
更改为
protected
,它可能会起作用,但仍然不起作用


提前感谢

您需要实例化类本身,而不是方法
InsertDB()
。您可以使用关键字
new
实例化一个类。您可以参考有关oracle/sun的官方教程

例如:

Testingground myObject = new Testingground();
myObject.InsertDB(constants[i], variables[i], ticker[i], count);
方法也可以声明为
静态
。在这种情况下,您可以直接引用它们,即Testingground.InsertDB(常量[i]、变量[i]、ticker[i]、count)而不为该类构造对象


按照惯例,方法名称也是驼峰式的。阅读有关java中命名约定的更多信息。

您需要创建包含
InsertDB
方法的类的实例,然后在该实例上调用该方法

或者,您可以将该方法设置为静态,这样就不需要从中调用它的实例


您需要了解
static
字段/方法是在类本身上定义的。因此,在整个JVM中有一个静态字段/方法的实例。非静态方法/字段位于对象的实例上——每个对象都有自己的非静态字段/方法。

您不能实例化方法名称。您必须实例化该方法所在的类,然后在对象上调用该方法。

您试图将一个方法声明为类。在java中,这些方法在它们的类容器中受支持,这些类容器可以声明为对象。如果您的
InsertDB()
函数位于类中(例如,
DataManager.java
,声明为
public class DataManager
),您将执行以下操作:

DataManager dmanager = new DataManager();
dmanager.InsertDB(constants[i], variables[i], ticker[i], count);

非静态方法需要执行对象引用(this)。可以在没有分配对象的情况下调用静态方法。因此,从静态方法内部引用字段类型或类方法是不可能的,因为没有调用所需方法的对象实例。

您不能在此处发布完整代码,而不是显示不同部分吗?文件相当大。我只是选择了我认为相关的部分。这可能是冲突,但当我这样做时,我得到了一个错误:类Testingground中的构造函数Testingground。Testingground不能应用于给定的类型;必需:testingground.testingground.SolverResult找到:没有参数我在应用程序中有另一个名为SolverResult的类我应该创建一个新类,而不是Testingground..其他东西,然后将要上载到DB的类放在下面?@Lostsoul-您的
Testingground
类必须定义一个构造函数,该构造函数将
SolverResult
作为参数。你能在你的帖子中添加这个构造函数片段吗?这就是你想要的:公共类Testingground{private SolverResult delegate;@Lostsoul-我正在寻找构造函数方法。它可能是这样的:-
public Testingground(SolverResult delegate){this.delegate=delegate;}
当我将方法设置为静态时,其中的所有命令都停止工作(它们正在将变量上载到数据库)@lostsoul,您没有显示它实际执行的任何操作,因此我们无法真正帮助您。感谢John,现在我遇到了此错误:类Testingground中的构造函数Testingground。Testingground无法应用于给定类型;必需:Testingground.Testingground.SolverResult找到:无参数我有另一个名为SolverResult wit的类在上面提到的应用程序中,我是java新手,为这个函数创建一个新文件和创建一个新类是否更可取?你必须发布你的代码,但从听起来的情况来看,你试图用一个不存在的构造函数声明一个Testingground对象。尽管有很多事情可能是错误的,但它的重要性在不查看代码本身的情况下,我们可以告诉您每个编译器错误的含义。
DataManager dmanager = new DataManager();
dmanager.InsertDB(constants[i], variables[i], ticker[i], count);