Нестатический метод нельзя ссылаться в статическом контексте

Я исследовал это вокруг и все еще не могу решить эту проблему. В моей программе есть следующее:

   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 и вроде унаследовал эту программу (у меня не было этой проблемы с моими программами), может ли кто-нибудь сказать мне, что я могу сделать, чтобы заставить это работать и логику этого? (my insertdb класс дает мне ошибки, если я превращаю его в статический, чтобы подход не работал). Я также прочитал, что это может сработать, если я изменил public на protected, но он все равно не работает.

Заранее спасибо

Ответ 1

Вам нужно создать экземпляр класса, а не метод 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 здесь.

Ответ 2

Вам нужно создать экземпляр класса, который содержит метод InsertDB, а затем вызвать метод в экземпляре.

В качестве альтернативы вы можете сделать метод статическим, а затем вам не понадобится экземпляр, из которого вы его вызываете.

Вам нужно понять, что поля/методы static определены в самом классе. Таким образом, существует один экземпляр статического поля/метода во всей JVM. Нестатические методы/поля живут в экземплярах объектов - каждый объект имеет собственное нестатическое поле/метод.

Ответ 3

Вы не можете создать имя метода. Вам необходимо создать экземпляр класса, в котором находится этот метод, а затем вызвать метод на вашем объекте.

Ответ 4

Вы пытаетесь объявить метод как класс. В java методы поддерживаются в контейнерах классов, которые могут быть объявлены как объекты. Если ваша функция InsertDB() находилась в классе (например, DataManager.java, объявленная как public class DataManager), вы сделали бы что-то вроде этого:

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

Ответ 5

Нестационарный метод требует ссылки на объект (это) для выполнения. Статический метод можно вызывать без выделенного объекта. Поэтому ссылаться на тип поля или метод класса из статического метода невозможно, потому что не существует экземпляра объекта, на который вызывается требуемый метод.