无法静态引用非静态字段

时间:2019-09-22 18:25:05

标签: java printing static

我已经用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象”。我究竟做错了什么?我知道这与这两种方法中的一种或两种都具有静态性和无效性有关,但我似乎尝试了所有组合均无济于事。

1 个答案:

答案 0 :(得分:0)

非静态变量不能从静态方法中引用,您需要Show类的对象才能访问main中的“ word”实例变量。 如果您不确定某个对象是什么或如何创建一个对象,那么现在就删除您的构造函数(公共Show(String word)方法),然后将“ word”定义为静态对象(公共静态String word;),您的代码就可以使用,欢迎来到面向对象编程的世界,您还有很多东西要读。

此外,这绝对是重复的。 Non-static variable cannot be referenced from a static context