无法调用非静态方法

3

我正在尝试使用 wavRead(filename),但是收到了错误信息:无法对非静态方法进行静态引用

我可以简单地将其设为静态,并解决我的问题,但我想不通过那种方式来解决。我希望保持该方法为非静态的。

以下是一部分代码,让您了解情况:

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个回答

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

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


4

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

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

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

1

在调用wavRead之前,您需要创建一个Sound对象。例如:

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

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


0

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


在任何地方调用非静态方法的唯一方式是拥有该类的实例。 - Dawood ibn Kareem

0
静态方法可以直接调用同一类中的另一个静态方法,无需创建类的对象。 如果调用非静态方法,则首先创建类的对象,然后调用该对象的非静态方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接