2010-03-16 67 views
1

可能重複:
Static method in javaJava方法幫助

好了,所以我工作的一類,我走..簡單的音樂庫中的項目。現在我有一些問題,主要的問題是我得到

這裏的「非靜態方法不能從靜態上下文中引用」是一個功能我有

public void addSong() { 
    Scanner scan = new Scanner(System.in); 
    Song temp = new Song(); 
    int index = countFileLines(Main.databaseFile); 
    index = index + 2; 
    temp.index = index; 
    System.out.print("Enter the artist name: "); 
    temp.artist.append(scan.next()); 
} 

現在,多數民衆贊成在稱爲LibraryFunctions的類文件。所以我可以通過LibraryFunctions.addSong()來訪問它。

現在我試圖在我的主要java文件中運行這個,它給了我錯誤,我知道錯誤發生的原因,但是我該怎麼做呢?如果我使addSong()成爲一個靜態函數,那麼它會引發錯誤,並且Song temp = new Song()是靜態的。有點諷刺。

對此很感激!

回答

1

如果您想將其稱爲LibraryFunctions.addSong(),則需要簽名public static void addSong()

更多信息:
只有靜態方法可以在沒有實例化類的情況下被調用。

+0

他試過,但得到了進一步的錯誤。 – vickirk 2010-03-16 16:06:19

3

遵循這些簡單的規則:

  1. 如果它是一個staticClassName.methodName()
  2. 調用它。如果它是一個非staticclassInstance.methodName()
+0

雖然很好的建議,我相信這是操作所遵循的。我認爲操作系統的問題與處理嵌套類的經驗不足有關,靜態/非靜態嵌套類之間的區別是他的錯誤的唯一解釋。 – vickirk 2010-03-16 16:05:28

1

您也可以嘗試把它叫做:

LibraryFunctions lf = new LibraryFunctions(); 
lf.addSong(); 
1

好吧喲u有兩種選擇真的:

  1. 變化addSong()靜態和參考歌曲通過它的靜態成員,如果可能的話。
  2. 創建的LibraryFunctions一個新實例,然後使用非靜態方法addSong()
1

我帶你們班歌是一個非靜態的嵌套類?例如

class LibraryFunctions { 

    class Song { 
     // ... 
    } 

} 

如果是這樣,您可以將其設置爲靜態嵌套類,或將Song類提升爲單獨的類。

0

就結構而言,我可以建議將LibraryFunctions類文件轉換爲MusicLibrary類嗎?這樣,在您的主應用程序代碼中,您可以在每次運行代碼時實例化MusicLibrary。它還將使分離靜態函數和實例函數變得更加容易,這可能會立即解決您的問題。

public class MusicManager { 

    public static void main(String[] args) { 
     MusicLibrary myMusic = new MusicLibrary(); 
     myMusic.addSong(); 
     // other stuff 
    } 
} 

然後MusicLibrary:

public class MusicLibrary { 

    public MusicLibrary() { 
    } 

    public void addSong() { 
     Scanner scan = new Scanner(System.in); 
     Song temp = new Song(); 
     int index = countFileLines(Main.databaseFile); 
     index = index + 2; 
     temp.index = index; 
     System.out.print("Enter the artist name: "); 
     temp.artist.append(scan.next()); 
    } 
} 

最後,我會把類宋MusicLibrary外側,以便以後可以重新使用。

這樣做的另一個好處是可以讓MusicLibrary實現Serializable並將庫保存到文件中。另外,您可以在MusicLibrary中放置一個MusicLibraries數組,並擁有播放列表。各種選項。