2010-03-16 68 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数组,并拥有播放列表。各种选项。