【问题标题】:Can't call non static method [duplicate]无法调用非静态方法[重复]
【发布时间】:2013-10-03 01:38:22
【问题描述】:

我正在尝试使用此 wavRead(filename),但收到消息 cannot make a static reference to a non static method

我可以简单地将其设为静态并解决我的问题,但是如果不走那条路线怎么办。我想保持方法非静态。

这里有一些代码让你看看发生了什么:

public class Sound {

double [] mySamples;
public static void main(String[] args){

    String filename = null;
    System.out.println("Type the filename you wish to act upon.");
    Scanner scanIn = new Scanner(System.in);
    filename = scanIn.next();
    wavRead(filename);


}
public void  wavRead(java.lang.String fileName){
    mySamples = WavIO.read(fileName);
}

【问题讨论】:

    标签: java methods static


    【解决方案1】:

    创建你的类的实例

    public static void main(String[] args){
    
        String filename = null;
        System.out.println("Type the filename you wish to act upon.");
        Scanner scanIn = new Scanner(System.in);
        filename = scanIn.next();
        Sound sound = new Sound();
        sound.wavRead(fileName);
    }
    

    这是一个实例方法,它需要一个实例来访问它。请转至official tutorials on classes and objects

    【讨论】:

      【解决方案2】:

      您不能从main 或任何其他静态方法调用非静态方法或访问非静态字段,因为非静态成员属于一个类实例,而不是整个类。

      你需要为你的类创建一个实例,并在其上调用wavRead,或者将wavReadmySamples设为静态:

      public static void main(String[] args) {
          Sound instance = new Sound();
          ...
          instance.wavRead(fileName);
      }
      

      【讨论】:

        【解决方案3】:

        您需要先创建一个Sound 对象,然后才能对其调用wavRead。类似的东西

        Sound mySound = new Sound();
        mySound.wavRead(filename);
        

        静态只是意味着您不需要该方法所属的类的实例。

        【讨论】:

          【解决方案4】:

          从静态方法调用非静态方法的唯一方法是拥有该类的实例。

          【讨论】:

          • 在任何地方调用非静态方法的唯一方法是拥有该类的实例。
          【解决方案5】:

          静态方法可以直接调用同一个类中的另一个静态方法。你不需要创建类的对象。 如果调用非静态方法则首先创建类的对象并调用object.non静态方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-11-20
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多