Java Can';t对非静态字段进行静态引用

Java Can';t对非静态字段进行静态引用,java,printing,static,Java,Printing,Static,我已经用Java编写了我的第一个代码,它打印了一个围绕作为类参数输入的单词的框架。我已经声明了公共变量“word”,并将其分配给参数,也称为“word”。我相信名为“print”的方法没有问题,它完成了大部分工作。然而,调用“print”的主要方法不起作用,说它不能对非静态字段“word”进行静态引用 我还没有完全理解static和void的概念,但是我看到的所有示例都使用static和void作为方法,尤其是main方法。我已经尝试从main方法中删除static,当我这样做时,错误在运行之前

我已经用Java编写了我的第一个代码,它打印了一个围绕作为类参数输入的单词的框架。我已经声明了公共变量“word”,并将其分配给参数,也称为“word”。我相信名为“print”的方法没有问题,它完成了大部分工作。然而,调用“print”的主要方法不起作用,说它不能对非静态字段“word”进行静态引用

我还没有完全理解static和void的概念,但是我看到的所有示例都使用static和void作为方法,尤其是main方法。我已经尝试从main方法中删除static,当我这样做时,错误在运行之前消失,但在运行它时会在控制台中重新出现,并说main绝对必须是static

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;

}
公共类节目{
公共节目(字符串字){
这个单词=单词;
}
公共静态void main(字符串[]args){
印刷品(word);
}
公共静态无效打印(字符串字){
系统输出打印(“+”);
for(int i=0;i

我认为我的代码中的逻辑是合理的,我指的是print方法。我只是不知道如何让每件事都顺利进行。我只想最终将Show.java编译为Show.class,并能够完成java Show mammoth,它将打印一个框架包围的“mammoth”。我做错了什么?我知道这与其中一个或两个方法中的static和void有关,但我尝试了所有组合,但都没有效果。

静态方法无法引用非静态变量,您需要类Show的对象才能访问main中的“word”实例变量。 如果您不确定对象是什么或如何创建对象,那么现在请删除构造函数(publicshow(stringword)方法)并将“word”定义为static(publicstaticstringword;),您的代码将正常工作,欢迎来到面向对象编程的世界,您将有很多要阅读的内容


而且,这绝对是重复的

您的直接问题在上面链接的问题中进行了解释。这个问题解释了你是如何实现你真正想要做的:(忽略另一个问题使用的是罐子,这并不重要)