Вопрос-ответ

"Non-static method cannot be referenced from a static context" error

Ошибка "На нестатический метод нельзя ссылаться из статического контекста"

У меня есть класс с именем Media который имеет метод с именем setLoanItem:

public void setLoanItem(String loan) {
this.onloan = loan;
}

Я пытаюсь вызвать этот метод из класса с именем GUI следующим образом:

public void loanItem() {
Media.setLoanItem("Yes");
}

Но я получаю сообщение об ошибке


на нестатический метод setLoanItem (java.lang.String) нельзя ссылаться из статического контекста


Я просто пытаюсь изменить переменную onloan в Media классе на "Yes" из GUI класса.

Я просмотрел другие разделы с таким же сообщением об ошибке, но ничего не щелкает!

Переведено автоматически
Ответ 1

Методы экземпляра необходимо вызывать из экземпляра. Ваш setLoanItem метод является методом экземпляра (у него нет модификатора static), который необходим для функционирования (потому что он устанавливает значение для экземпляра, в котором он вызывается (this)).

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

Media media = new Media();
media.setLoanItem("Yes");

(Кстати, было бы лучше использовать логическое значение вместо строки, содержащей "Yes".)

Ответ 2

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

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

Ответ 3

setLoanItem() это не статический метод, это метод экземпляра, что означает, что он принадлежит конкретному экземпляру этого класса, а не самому этому классу.

По сути, вы не указали, для какого медиа-объекта вы хотите вызвать метод, вы указали только имя класса. Медиаобъектов могут быть тысячи, и компилятор не имеет возможности узнать, какой из них вы имели в виду, поэтому он выдает соответствующую ошибку.

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

public void loanItem(Media m) {
m.setLoanItem("Yes");
}
Ответ 4

Вам необходимо правильно отделить статические данные от данных экземпляра. В вашем коде onLoan и setLoanItem() являются членами экземпляра. Если вы хотите ссылаться на них / вызывать их, вы должны сделать это через экземпляр. Итак, вы либо хотите

public void loanItem() {
this.media.setLoanItem("Yes");
}

или

public void loanItem(Media object) {
object.setLoanItem("Yes");
}

в зависимости от того, как вы хотите передать этот экземпляр.

java