创建对象后,无法从静态上下文中引用非静态变量
问题描述:
当我尝试创建新对象时,我得到的典型非静态变量无法从静态上下文错误中引用。 如果我将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());
}
}
答
Class BookWord拥有对JavaApplication13对象的隐式引用。为了使它没有这样的参考,你应该声明它是静态的。
现在,BookWord是一个内部类,使用官方术语。内部类是一种嵌套类。如果您将BookWord声明为静态,那么它是一个静态嵌套类。有关解释,请参见https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
+0
声明类静态在...公共类静态BookWord? –
+0
@TheRoofer是(公共静态类BookWord)。详情请参阅我的更新。 – DodgyCodeException
请解释您为什么希望BookWord嵌套在第一位,因为我认为这将指导我们如何回答您的问题,而不仅仅告诉您如何使构建错误消失。 – nicomp
如果你不介意的话,请从这个意义上解释嵌套。我使用BookWord作为构造函数,因为它是在UML图中规定的。 –
你有一个类在一个类中声明的类。 'BookWord'的封装类是'JavaApplication1'。 BookWord是JavaApplication1的成员类,并且是一个内部类,这意味着如果没有JavaApplication1的实例可以链接它,就不能创建“BookWord”的实例。 – scottb