2015-05-12 3 views
-3

Новое на Java, пытаясь выяснить, как решить эту проблему.Нестатический метод не может ссылаться на статический контекст

 boolean myBool = G(A,n,m,0); 

По какой-то причине это не так. Почему бы мне не называть эту простую функцию? И main(), и G() являются частью класса C().

+0

Эта связь гораздо сложнее, я не понимаю. Этот случай очень прост, разный. – user4892642

+0

прочитал о статике и разнице между обычными переменными класса, тогда вы ее получите. – cerkiewny

+0

Я сомневаюсь, что это переменная, которая действует в этой строке. – Aify

ответ

0

Нестационарный метод относится к определенному экземпляру класса, а статический метод принадлежит самому классу. Внутри main, который является статическим методом, вы не можете ссылаться на нестатические методы, не имея конкретного объекта для их запуска. Например .:

boolean myBool = new C().G(A,n,m,0); 

Однако, если класс не имеет интересное состояние, или это состояние не влияет на метод G, вы должны определить G как static.

+0

Как узнать, следует ли определять функцию как статическую? – user4892642

+0

Оба подхода сработали. Я изменил G на статичный, и он работал, как ожидалось. Я также попытался удалить статику и использовать новый C(), который тоже работал. – user4892642

+0

Общее правило большого пальца - если класс имеет элементы данных, принадлежащие экземпляру (т. Е. Класс является statefull), а метод относится к этому состоянию - он не должен быть статическим. В противном случае сделать его статическим, вероятно, приемлемо. – Mureinik

0

Это, скорее всего, потому, что вы не указали static в определении метода G().

Main() - это статический метод, и с static вещи работают до того, как статические вещи делают, статические вещи могут только вызывать/использовать static вещи.

Обратите внимание, что ваш Main() не требует, чтобы вы сделали объект C. Это точка входа в программу, и это не имеет смысла, если вам нужно сначала создать объект для запуска вашей программы - откуда бы вы сделали этот объект?

Если вы хотите сделать нестатические вызовы, создайте объекты соответствующего класса.

+0

Что такое статичность? Не меняется? – user4892642

+0

Он принадлежит классу, а не объектам этого класса. – Aify

+0

звучит политически – user4892642

Смежные вопросы