我正在尝试使用此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);
}
答案 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
,或使wavRead
和mySamples
静态:
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静态方法。