1

我无法编译下面的代码,因为我有 17 个关于“无法从静态上下文引用的非静态变量”的错误。它总是指向this关键字。

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;
        }
    }
}
4

3 回答 3

3

您不能从静态初始化块或方法访问非静态即实例成员。

  • 静态与类相关,实例变量与类的实例相关。
  • 的引用this意味着您正在引用类的当前对象。
  • 静态块与类相关,因此它没有关于对象的信息。所以无法识别this

在你的例子中。你应该使方法borrow非静态。这意味着它们将与类对象相关,您可以使用this.

于 2013-07-23T15:28:46.337 回答
2

一句话,

您不能在静态上下文中使用“this 关键字”,例如静态方法/静态初始化程序。

于 2013-07-23T15:27:18.623 回答
1

静态变量是类范围的。是对象范围。(换句话说,依赖于对象的实例)您必须实例化一个对象才能访问

反之则不然。您可以从对象实例访问静态变量

于 2013-07-23T15:28:20.757 回答