3

我正在尝试使用它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);
}
4

5 回答 5

12

创建你的类的一个实例

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);
}

这是一个实例方法,它需要一个实例来访问它。请阅读有关类和对象的官方教程

于 2013-10-03T01:39:35.880 回答
4

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

你需要创建你的类的一个实例,并调用wavRead它,或者 makewavReadmySamplesstatic:

public static void main(String[] args) {
    Sound instance = new Sound();
    ...
    instance.wavRead(fileName);
}
于 2013-10-03T01:40:35.347 回答
1

您需要先创建一个Sound对象,然后才能调用wavRead它。就像是

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

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

于 2013-10-03T01:40:25.043 回答
0

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

于 2013-10-03T01:41:24.587 回答
0

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

于 2013-10-03T07:07:00.483 回答