理解程序的逻辑

时间:2012-02-18 15:01:51

标签: java

我想知道为什么我们不能在java中用方法编写方法,为什么代码不能执行

public class Quiz{

    public static void main(String[] args) {
        Book b = new Book(18);
        Book c = new Book(10);
        c = compare(c, b);
    }

    public static Book compare(Book k, Book m) {
        k.x = 10;
        k = null;
        m.x = 3;
        return m;
    }

    class Book {

        int x = 20;

        public Book(int x) {
            this.x = x;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

因为您的class Book是(非静态)inner class,这意味着它必须存在于外部类的实例中,您的类测验。

但您不创建Quiz

的任何实例

使Book类静态:

static class Book {
  ...

或者将类定义移到Quiz类之外。

答案 1 :(得分:0)

static class Book {

这将解决编译错误。

  

我想知道为什么我们不能在java中的方法中编写方法   块引用

你的意思是为什么我们不能在另一个方法中声明一个方法?

答案 2 :(得分:0)

因为Book是非静态内部类,所以它只能从Quiz的非静态方法实例化(否则它将无法找到this参考,如果它需要一个)。但我承认我并没有真正看到你在这里想要实现的目标。

答案 3 :(得分:0)

您无法编译此程序。编译器会抱怨:

Quiz.java:4: non-static variable this cannot be referenced from a static context

这意味着,Book中包含的课程Quiz尚未实例化Quiz

因此,您需要像这样实例化一本新书:

public static void main(String[] args) {
    Quiz q = new Quiz();
    Book b = q.new Book(18);
    Book c = q.new Book(10);
    c = compare(c, b);
}