2013-07-23 155 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

哇,自從這個問題出現在'SO'後只有5分鐘 – Reimeus

+0

您的借用方法是否需要靜態?我覺得使它非靜態可以解決你的問題... – StephenTG

+1

讓你覺得也許java IDE可能會提醒你。 – sje397

回答

2

您無法從靜態init塊或方法訪問非靜態即實例成員。

  • static與類和實例變量有關,與類的實例有關。
  • this的引用意味着您引用了當前類的對象。
  • 靜態塊與類相關,因此它沒有關於對象的信息。所以它不能識別this

在你的例子中。你應該使方法borrow非靜態。這意味着他們將涉及到課堂的對象,你可以使用this

2

在一個句子,

不能使用"this keyword"一個靜態的上下文中,如靜態方法/靜態初始化。

+0

這正是錯誤所說的,儘管.. – arshajii

1

靜態變量是類寬的。 這個是對象廣泛的。 (換句話說依賴於對象的一個​​實例)你必須實例化一個對象才能訪問這個

相反是不正確的。您可以從對象實例訪問靜態變量

相關問題