2017-10-13 43 views
0

當我嘗試創建新對象時,我得到的典型非靜態變量無法從靜態上下文錯誤中引用。 如果我將BookWord類設爲靜態,則一切正常。在Java中可以嗎?創建對象後,無法從靜態上下文中引用非靜態變量

package javaapplication13; 

public class JavaApplication13 { 

    public class BookWord { 

     private String wordCharacters; 
     private int count; 

     public BookWord(String word){ 
      wordCharacters = word; 
     } 

     public String getWord() { 
      return wordCharacters; 
     } 

     public int getCount() { 
      return count; 
     } 
    } 

    public static void main(String[] args) { 
     BookWord existing = new BookWord("Hello"); // *** Error here *** 

     System.out.println("The word is " + existing.getWord()); 
     System.out.println("The current count is " + existing.getCount()); 

    } 
} 
+0

請解釋您爲什麼希望BookWord嵌套在第一位,因爲我認爲這將指導我們如何回答您的問題,而不僅僅告訴您如何使構建錯誤消失。 – nicomp

+0

如果你不介意的話,請從這個意義上解釋嵌套。我使用BookWord作爲構造函數,因爲它是在UML圖中規定的。 –

+1

你有一個類在一個類中聲明的類。 'BookWord'的封裝類是'JavaApplication1'。 BookWord是JavaApplication1的成員類,並且是一個內部類,這意味着如果沒有JavaApplication1的實例可以鏈接它,就不能創建「BookWord」的實例。 – scottb

回答

1

Class BookWord擁有對JavaApplication13對象的隱式引用。爲了使它沒有這樣的參考,你應該聲明它是靜態的。

現在,BookWord是一個內部類,使用官方術語。內部類是一種嵌套類。如果您將BookWord聲明爲靜態,那麼它是一個靜態嵌套類。有關解釋,請參見https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

+0

聲明類靜態在...公共類靜態BookWord? –

+0

@TheRoofer是(公共靜態類BookWord)。詳情請參閱我的更新。 – DodgyCodeException

相關問題