【问题标题】:JAVA - Cannot make a static reference to the non-static method [duplicate]JAVA - 无法对非静态方法进行静态引用[重复]
【发布时间】:2015-11-28 10:14:48
【问题描述】:
public class lookFor {

    //Tools
    //It returns the position of an element at the ArrayList, if not found returns -1
    public int User(String target, ArrayList<User> users){
        for(int i = 0; i < users.size(); i++){
            if(users.get(i).getUserName().equals(target)){
                return i;
            }
        }
        return -1;
    }
}

由于某种原因,当我尝试调用“用户”This Error appears

并要求我将“用户”方法设为静态方法,但我不知道它会产生什么影响。

【问题讨论】:

    标签: java methods static


    【解决方案1】:

    静态方法属于类,非静态方法属于类的实例。
    你需要创建一个类的实例:

     lookFor look = new lookFor();
    

    然后这样写:

     if(look.User(username,users)==-1){....};
    

    静态意味着整个类都有一个,而如果它是非静态的,则类(对象)的每个实例都有一个。为了引用非静态方法,您需要先创建一个对象,然后调用它。

    【讨论】:

      【解决方案2】:

      为了在静态上下文中使用User方法(例如main方法),您需要实例化 lookFor 类并在该对象上调用User 方法:

      lookFor look = new lookFor(); // Use appropriate constructor
      if(look.User(username, users) == -1) {
          ...
      }
      

      【讨论】:

      • 谢谢大家!多么菜鸟的错误^^u
      【解决方案3】:

      您必须创建lookFor 类的实例才能调用它的非静态方法。

      lookFor lf = new lookFor();
      if(lf.User(username,users)==-1) {
          ...
      

      【讨论】:

        【解决方案4】:

        如果您尝试在静态方法中访问 USER 方法,则会收到此错误。

        从静态方法调用非静态方法的唯一方法是 有一个包含非静态方法的类的实例。经过 定义,非静态方法是在实例上调用的方法 属于某个类,而静态方法属于该类本身。

        例如:

        您可以创建一个要调用该方法的类的实例,

        new lookFor().USER(target, list);
        

        【讨论】:

          猜你喜欢
          • 2014-11-19
          • 2014-06-08
          • 2013-06-30
          • 2021-08-31
          • 1970-01-01
          • 2011-06-25
          相关资源
          最近更新 更多