2013-10-03 3 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 개체를 만들어야합니다. 뭔가 같은 것

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

정적은 방금 메서드가 속한 클래스의 인스턴스를 가질 필요가 없음을 의미합니다.

4

정적 멤버가 클래스에 속하기 때문에 main 또는 기타 정적 메서드에서 비 정적 필드를 액세스하거나 비 정적 필드에 액세스 할 수는 있지만 전체 클래스에는 액세스 할 수 없습니다.

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

정적 메서드에서 비 정적 메소드를 호출 할 수있는 유일한 방법이다 :

당신은 클래스의 인스턴스를 만들고, 그 위에 wavRead 전화하거나 wavReadmySamples 정적해야 그 클래스의 인스턴스를 가져라.

+0

비 정적 메서드를 호출하는 유일한 방법은 클래스의 인스턴스를 만드는 것입니다. –

0

정적 메서드는 동일한 클래스에서 다른 정적 메서드를 직접 호출 할 수 있습니다. 클래스의 개체를 만들 필요가 없습니다. static이 아닌 메소드를 호출하면 먼저 클래스의 객체를 만들고 object.non 정적 메서드를 호출합니다.

관련 문제