我研究了这个,似乎仍然无法解决这个问题。我的程序中有以下内容:
public void InsertDB(double price, double shares, String ticker, int id)throws Exception {
//do some stuff
}
我在我的主类中尝试了以下内容(并且在静态上下文中无法引用上面的错误非静态方法):
InsertDB(constants[i], variables[i], ticker[i], count);
然后我读到你必须创建一个新实例,所以我尝试了(Testingground是我的程序的名称),我得到一个错误,说它无法找到InsertDB符号:
Testingground myObject = new InsertDB();
我是java的新手并继承了这个程序(我的程序没有遇到过这个问题),有人能告诉我我能做些什么才能让它工作以及它背后的逻辑?(我的insertdb如果我将它变为静态,那么class会给我错误,因此这种方法不起作用)。我还读到,如果我将public
更改为protected
,但它仍无效,我可能会有效。
提前致谢
答案 0 :(得分:5)
您需要实例化类本身,而不是方法InsertDB()
。您可以使用关键字new
来实例化一个类。您可以参考oracle / sun docs上的官方教程。
示例:
Testingground myObject = new Testingground();
myObject.InsertDB(constants[i], variables[i], ticker[i], count);
方法也可以声明为static
。在这种情况下,您可以直接引用它们,即。 Testingground.InsertDB(constants[i], variables[i], ticker[i], count);
没有构造该类的对象。
同样按照惯例,方法名称是驼峰式的。阅读有关java here中命名约定的更多信息。
答案 1 :(得分:2)
您需要创建包含InsertDB
方法的类的实例,然后在实例上调用该方法。
或者,您可以将方法设置为静态,然后您不需要从中调用它的实例。
您需要了解在类本身上定义了static
个字段/方法。因此整个JVM中有一个静态字段/方法实例。非静态方法/字段位于对象的实例上 - 每个对象都有自己的非静态字段/方法。
答案 2 :(得分:1)
您无法实例化方法名称。您必须实例化该方法所在的类,然后在您的对象上调用该方法。
答案 3 :(得分:1)
您正在尝试将方法声明为类。在java中,这些方法在它们的类容器中得到支持,这些容器可以声明为对象。如果您的InsertDB()
函数属于某个类(例如,DataManager.java
,声明为public class DataManager
),您可以执行以下操作:
DataManager dmanager = new DataManager();
dmanager.InsertDB(constants[i], variables[i], ticker[i], count);
答案 4 :(得分:1)
非静态方法需要执行对象引用(this)。可以在没有分配对象的情况下调用静态方法。因此,从静态方法内部引用字段类型或类方法是不可能的,因为没有调用所需方法的对象实例。