【问题标题】:how to solve "cannot make a static reference to the non-static method"? [duplicate]如何解决“无法对非静态方法进行静态引用”? [复制]
【发布时间】:2019-05-07 13:33:06
【问题描述】:

我对“getClass”有问题,eclipse 写了这个消息: “无法从 Object 类型对非静态方法 getClass() 进行静态引用”

这是代码:

 public static void main(String[] args) {
    JFrame f = new JFrame();
    File path = new File(getClass().getResource("/resources/image.jpg").getFile());
    BufferedImage image = ImageIO.read(path);

谢谢!

【问题讨论】:

  • 您正在使用 getClass() - 这是 main 所在类中的公共非静态方法。如果要获取 getClass() - 您需要首先创建此类的实例,然后调用它。
  • YourClass.class.getResource(...)
  • @leonardkraemer:不幸的是,骗子没有回答这个特定的问题,也没有任何人能够回答它。
  • @Makoto 应该是 stackoverflow.com/questions/8275499/… 不过它是 2 秒的谷歌搜索。我不能再次为新的骗子举旗:/尽管如此,链接的骗子会教育错误的原因,从长远来看这应该会有所帮助。
  • @leonardkraemer:希望以后你会建议更好的副本,并有更多的时间在谷歌上为他们提供建议? :)

标签: java


【解决方案1】:

(如果你的班级名称是Main 那么)使用Main.class.getResource 而不是this.getClass.getResource

阅读this了解更多详情。

【讨论】:

    【解决方案2】:

    一个静态方法属于class

    一个非静态方法属于该类的instance

    当您调用getResource() 时,它不与任何实例关联。

    做类似的事情

    Main.class.getResource("images/pic.png")
    

    你可以在here找到更多关于static的信息

    【讨论】:

      【解决方案3】:

      静态关键字意味着在这种情况下函数“main”绑定到类本身,因此你不能调用像这样“getClass()”这样的非静态方法,因为那样就等于说“ this.getClass()" 但 this 不能引用任何对象,因为您在静态方法中调用 getClass。因此,为什么你必须在静态方法中引用类本身,说MainClass.class.getResource()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-08
        • 2011-06-25
        相关资源
        最近更新 更多