2012-02-18 61 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); 
}