【问题标题】:Why should my method be static? [duplicate]为什么我的方法应该是静态的? [复制]
【发布时间】:2015-10-15 18:57:35
【问题描述】:

嗨,我有这段代码,我真的很困惑为什么我必须将 lel 方法设为静态。错误是这个“非静态方法不能从静态内容中引用”。通常,当我创建方法来构造新对象或在主方法中操作对象时,我不会收到此错误消息。另外,我从未将 e 声明为静态!!有人可以向我解释为什么会这样吗?谢谢你:)

class x {

    public static void main(String[]args){

        int e= 2232;

        e= lel(e);

    }

    int lel(int k){
        return k+1;
    }
}

【问题讨论】:

  • 你有两种方法。当您阅读非静态方法时,它指的是哪个方法?
  • 当您阅读无法从静态上下文引用时,您认为是哪个上下文(假设您有两种方法,其中只有一种是static)?
  • 长话短说静态方法属于类而不是对象。现在看看你的代码。您正在调用没有对象的非静态方法 lel。
  • 快速提问:你认为static 是什么意思?
  • 错误消息中没有任何内容告诉您该方法应该是静态的。

标签: java methods static main


【解决方案1】:

您可以实施两种解决方案。第一种选择是使您的int lel(int k) 成为静态方法,看起来像static int lel(int k)

您的另一个选择是声明您的类 x 的一个新对象,并将其用于您在 main 中的 lel 方法,如 cmets 中建议的 MickMnemonic。该代码如下所示:

e = new x().lel(e);

我相信最简单的方法是将 lel 方法设为静态,但这取决于您。

静态方法更深入的解释可以看here.

【讨论】:

  • '在 main 方法中引用的任何代码也必须是静态的'是不真实的。否则永远不可能有任何非静态方法。你自己的建议证明了这一点。
  • 我写的时候思路不对,谢谢你指出,我把它从我的答案中删除了。
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2012-12-28
  • 2010-09-17
  • 1970-01-01
  • 2020-07-02
相关资源
最近更新 更多