2013-10-03 147 views
2

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

回答

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

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

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

静态仅表示您不需要拥有该方法所属类的实例。

4

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

你需要让你的类的实例,并调用它wavRead,或使wavReadmySamples静:

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

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

+0

ANYWHERE调用非静态方法的唯一方法是获得该类的一个实例。 –

0

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