创建对象后,无法从静态上下文中引用非静态变量

问题描述:

当我尝试创建新对象时,我得到的典型非静态变量无法从静态上下文错误中引用。 如果我将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

Class BookWord拥有对JavaApplication13对象的隐式引用。为了使它没有这样的参考,你应该声明它是静态的。

现在,BookWord是一个内部类,使用官方术语。内部类是一种嵌套类。如果您将BookWord声明为静态,那么它是一个静态嵌套类。有关解释,请参见https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

+0

声明类静态在...公共类静态BookWord? –

+0

@TheRoofer是(公共静态类BookWord)。详情请参阅我的更新。 – DodgyCodeException