2012-02-18 66 views
-2

我想知道我们为什么不能在编写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; 
     } 
    } 
} 
+2

是这个功课BTW?应该被标记为 – Jakub 2012-02-18 15:06:08

+2

变量名可以做更有意义的事情! – cmbuckley 2012-02-18 15:11:49

+2

请不要忽略您从编译器获得的错误消息。他们**是你的问题的答案。如果你不明白错误信息,你应该在你的问题中字面上复制它们,以便我们可以用外行的话来解释它。 – BalusC 2012-02-18 15:21:45

回答

0
static class Book { 

这样便解决了编译错误。

我想知道为什么我们不能写方法方法Java中 大段引用

你的意思是,为什么我们不能宣告​​内的另一个方法?

0

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

2

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

但你没有创建的Quiz

任何实例进行书类的静态:

static class Book { 
    ... 

或移动类定义测验类之外。

0

您无法编译此程序。

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

这意味着,类Book包含内QuizQuiz尚未实例:编译器将抱怨。

因此,你需要实例化一个新的书是这样的:

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