2013-10-03 176 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靜態方法。