2011-02-07 3 views
61

У меня есть класс с именем Media который имеет метод с именем setLoanItem:«Non-статический метод не может ссылаться из статического контекста» ошибки

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

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

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

Но я получаю ошибку

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

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

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

+3

вы должны принять ответ на это. – NateW

ответ

11

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

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

71

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

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

+0

Я получаю исключение нулевого указателя, когда делаю это, хотя ... Как вы думаете, проблема? Сообщите мне, нужен ли вам какой-либо код. Благодаря! (Застрял на этом в течение 3 с половиной часов!) –

+0

@ Ruchir: см. Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i -почини это –

0

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

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

или

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

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

2

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

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

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

public void loanItem(Media m) { 
    m.setLoanItem("Yes"); 
} 
Смежные вопросы