【问题标题】:Cannot make a static reference to the non-static method setString(String) from the type MyString [duplicate]无法从 MyString 类型对非静态方法 setString(String) 进行静态引用 [重复]
【发布时间】:2014-09-02 04:31:41
【问题描述】:

我需要为接口中描述的方法创建一个类,如下:

public interface MyStringInterface {

    // Sets the value of the current string
    public void setString(String str);

    // Returns the current string
    public String getString();
}

当我使用以下方法创建一个类时,总是会出现这个错误,不会让我继续。我究竟做错了什么?我应该如何进行?

package seclass.assgn;

public class MyString implements MyStringInterface{

    static String name;

    public static void main(String[] args) {            
        setString("This is my sentence");
        System.out.println(getString());
    }

    public void setString(String str){
        name = str;
    }
    public String getString() {
        return name;
    }
}

【问题讨论】:

  • 您应该查阅数以千计的其他此类问题,其中一些您可以在右侧的相关部分下找到。
  • setString()getString() 是非静态方法,因此不能从静态上下文中引用它们。
  • 完成这项工作的一种方法是通过删除 static 修饰符使您的 name 非静态。
  • 了解静态的含义。

标签: java string static


【解决方案1】:

你需要一个MyString 的实例-

public static void main(String[] args) {
  MyString my = new MyString();            
  my.setString("This is my sentence");
  System.out.println(my.getString());
}

还有

static String name;

应该是

private String name;

或者,如果您不想要实例,只需使用

public static void main(String[] args) {
  name = "This is my sentence";
  System.out.println(name);
}

【讨论】:

    【解决方案2】:

    首先,你不必在接口中重复“public”。

    public interface MyStringInterface {
        void   setString(String str);
        String getString();
    } // end of class MyStringInterface
    

    那么你必须为你的实现创建一个对象:

    public class MyString implements MyStringInterface {
    String name;
    
    public static void main(String[] args) {
        new MyString().top();
    }
    
    
    void top() {
        setString("This is my sentence.");
        System.out.println(getString());
    }
    
    
    @Override
    public void setString(String str) {
        this.name = str;
    }
    
    
    @Override
    public String getString() {
        return this.name;
    }
    
    } // end of class MyString
    

    【讨论】:

    • 好! +1 表示正确答案并提到不要对接口成员使用 public 关键字。
    • 更好的是,将测试程序与实现分开。但我认为,这不是问题所在。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2019-06-29
    • 2015-03-14
    • 2014-06-08
    • 2012-07-14
    • 2013-01-15
    相关资源
    最近更新 更多