无法调用非静态方法

时间:2013-10-03 01:38:22

标签: java methods static

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

5 个答案:

答案 0 :(得分: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);
}

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

答案 1 :(得分:4)

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

您需要创建一个类的实例,并在其上调用wavRead,或使wavReadmySamples静态:

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

答案 2 :(得分:1)

您需要先制作一个Sound对象,然后才能调用wavRead。像

这样的东西
Sound mySound = new Sound();
mySound.wavRead(filename);

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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