【问题标题】:how to solve " non-static variable shelf cannot be referenced from a static context" error? [duplicate]如何解决“无法从静态上下文引用非静态变量架子”错误? [复制]
【发布时间】:2017-08-22 11:55:29
【问题描述】:

我正在创建一个简单的 Jave 控制台应用程序。所以我在不同的文件中使用了几个类。我需要为类实例设置一些参数并稍后检索它。但它给了我以下错误。请帮我解决它。

主类

public class Main {

    private Student student = new Student();   

    public static void main(String[] args) {

        student.setName("John");
            //Java: non-static variable student cannot be referenced from a static context

    }
}

学生班

public class Student {

    private String name;

     public String getName() {
        return name;
    }

    public void setName(String name) {
        name = name;
    }
}

如何避免这个问题?请帮忙

【问题讨论】:

  • 函数main 中没有Main实例
  • 将变量 student 声明为静态
  • 这是一个经典的新手错误,可以直接从类中调用static 方法。任何非静态的东西都需要从类的实例对象中调用。您的字段private Student student = new Student(); 仅存在于 Main 的实例对象中。喜欢: public class Main { private Student student = new Student(); public static void main(String[] args) { Main main = new Main(); main.student.setName("约翰"); } }

标签: java class static console-application


【解决方案1】:

像这样:

public class Main {

    public static void main(String[] args) {
        Student student = new Student();   
        student.setName("John");
    }
}

您可以将私有数据成员声明为静态,但根本没有理由使用类成员。这个类只不过是一个驱动程序。最好在 main 方法中实例化它需要的所有对象。

帮自己一个忙,学习Java coding standards。您没有在此代码中关注它们。

【讨论】:

  • 这到底为什么会被否决?完全正确。
  • 我没有投票,但这些投票反映了有用性,不一定是正确性。
  • 有用吗?我认为OP应该判断这一点。仅仅学习 Java 编码标准就值回票价了。简单的答案对提问的人仍然有用。
  • 您可能还没有注意到,但您不会单独回答 OP,而且 Stack Overflow 也不是帮助台,因此乐于助人显然也考虑到未来的读者。
  • 我不需要指导,尤其不需要你的指导;我已经在这里足够长的时间知道它是如何工作的。 SO 是一个面向程序员的问答网站。用户发布了一个问题;我给出了答案。这不是第一次或最后一次不熟悉 Java 的人会对静态和非静态感到困惑。除了 trollish cmets,您还在这里做出贡献吗?还是你也回答问题?
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多