静态方法中不能引用非静态方法

时间:2011-06-07 19:41:02

标签: java

我研究了这个,似乎仍然无法解决这个问题。我的程序中有以下内容:

   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,但它仍无效,我可能会有效。

提前致谢

5 个答案:

答案 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)。可以在没有分配对象的情况下调用静态方法。因此,从静态方法内部引用字段类型或类方法是不可能的,因为没有调用所需方法的对象实例。