我已经用Java编写了我的第一个代码,其中的一个代码围绕着作为类参数输入的单词打印了一个框架。我已经声明了公共变量“ word”,并将其分配给也称为“ word”的参数。我相信名为“ print”的方法没有问题,它可以完成大部分工作。但是,调用“ print”的主要方法无效,因为它不能静态引用非静态字段“ word”。
我还没有完全理解static和void的概念,但是我看到的所有示例都将static和void用于方法,尤其是main方法。我尝试从main方法中删除静态方法,当这样做时,错误在运行之前消失了,但是在运行它时又出现在控制台中,说main绝对必须是静态的。
public class Show {
public Show(String word) {
this.word = word;
}
public static void main(String[] args) {
print(word);
}
public static void print(String word) {
System.out.print("+");
for(int i = 0; i < word.length(); i++) {
System.out.print("-");
}
System.out.println("+");
System.out.print("|");
System.out.print(word);
System.out.println("|");
System.out.print("+");
for(int i = 0; i < word.length(); i++) {
System.out.print("-");
}
System.out.println("+");
}
public String word;
}
我认为代码中的逻辑是合理的,我的意思是方法print。我只是不明白如何使一切正常。我只想最终将Show.java编译为Show.class并能够做到,比如说Java Show猛which象,它将打印被框架包围的“猛mm象”。我究竟做错了什么?我知道这与这两种方法中的一种或两种都具有静态性和无效性有关,但我似乎尝试了所有组合均无济于事。
答案 0 :(得分:0)
非静态变量不能从静态方法中引用,您需要Show类的对象才能访问main中的“ word”实例变量。 如果您不确定某个对象是什么或如何创建一个对象,那么现在就删除您的构造函数(公共Show(String word)方法),然后将“ word”定义为静态对象(公共静态String word;),您的代码就可以使用,欢迎来到面向对象编程的世界,您还有很多东西要读。
此外,这绝对是重复的。 Non-static variable cannot be referenced from a static context