2013-07-23 3 views
1

Я начинающий в java.
Я не могу скомпилировать код ниже, потому что у меня есть 17 ошибок относительно «нестатической переменной, на которую нельзя ссылаться из статического контекста». Это всегда указывает на «это». заявление. Я студентнестатическая переменная, на которую нельзя ссылаться из статического контекста

package MyLib; 
import java.util.*; 

class Book { 

static int pages; 
static String Title; 
static String Author; 
static int status; 
static String BorrowedBy; 
static Date ReturnDate; 
static Date DueDate; 

public static final int 
    BORROWED = 0; 

public static final int 
    AVAILABLE = 1; 

public static final int 
    RESERVED = 2; 

    //constructor 
public Book (String Title, String Author, int pp) { 
    this.Title = Title; 
    this.Author = Author; 
    this.pages = pp; 
    this.status = this.AVAILABLE; 
} 

public static void borrow(String Borrower/*, Date Due*/){ 
    if (this.status=this.AVAILABLE){ 
     this.BorrowedBy=Borrower; 
     this.DueDate=Due; 

    } 
    else { 

     if(this.status == this.RESERVED && this.ReservedBy == Borrower){ 
      this.BorrowedBy= Borrower; 
      this.DueDate=Due; 
      this.ReservedBy=""; 
      this.status=this.BORROWED; 
     } 
    } 
} 
+6

Вау, прошло всего 5 минут с тех пор, как эта проблема появилась на 'SO' – Reimeus

+0

Ваш метод заимствования должен быть статичным? Я чувствую, что сделать его нестационарным устранить вашу проблему ... – StephenTG

+1

Заставляет вас думать, что, возможно, Java-ID могла бы предупредить об этом. – sje397

ответ

2

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

  • static относится к переменным класса и экземпляра, связанным с экземплярами класса.
  • Ссылка this означает, что вы имеете в виду текущий объект класса.
  • Статический блок связан с классом, поэтому он не имеет информации об объектах. Поэтому он не может идентифицировать this.

В вашем примере. вы используете метод borrow нестатический. Это означает, что они будут относиться к объекту класса, и вы можете использовать this.

2

В одном предложении,

вы не можете использовать "this keyword" внутри статического контекста, такие как статические методы/статические инициализаторы.

+0

Это именно то, что ошибка сказала, хотя .. – arshajii

1

Статические переменные являются классными. это - объект широкий. (другими словами, зависит от экземпляра объекта). Вы должны создать экземпляр объекта, чтобы получить доступ к .

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

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

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