на нестатический метод нельзя ссылаться в статическом контексте - PullRequest
0 голосов
/ 07 июня 2011

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

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

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

Ответы [ 5 ]

5 голосов
/ 07 июня 2011

Вам нужно создать экземпляр самого класса, а не метода 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 голосов
/ 07 июня 2011

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

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

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

1 голос
/ 07 июня 2011

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

1 голос
/ 07 июня 2011

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

DataManager dmanager = new DataManager();
dmanager.InsertDB(constants[i], variables[i], ticker[i], count);
1 голос
/ 07 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...