Java方法帮助

时间:2010-03-16 15:37:14

标签: java methods non-static

  

可能重复:
  Static method in java

好的,所以我正在为一个我正在上课的项目工作..简单的音乐库。现在我遇到了一些问题,主要问题是我得到“非静态方法无法从静态上下文中引用”

这是我的一个功能

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()保持为静态时,它会向我抛出错误。有点讽刺。

对此有很多帮助!

6 个答案:

答案 0 :(得分:3)

遵循以下简单规则:

  1. 如果是static方法,请使用ClassName.methodName()
  2. 进行调用
  3. 如果是非static方法,请使用classInstance.methodName()
  4. 进行调用

答案 1 :(得分:1)

如果您想将其称为LibraryFunctions.addSong(),则需要签名public static void addSong()

更多信息:
只能在不首先实例化类的情况下调用静态方法。

答案 2 :(得分:1)

您也可以尝试:

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

答案 3 :(得分:1)

你真的有两种选择:

  1. 如果可能,将addSong()更改为静态并通过静态成员引用歌曲。
  2. 创建LibraryFunctions的新实例,然后使用非静态方法addSong()

答案 4 :(得分:1)

我认为你的班级歌曲是非静态嵌套类? e.g。

class LibraryFunctions {

    class Song {
       // ...
    }

}

如果是这样,您可以将其设置为静态嵌套类,或将Song类提升为单独的类。

答案 5 :(得分: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());
    }
}

最后,我会将Song类放在MusicLibrary之外,以便您以后可以重复使用。

这样做的另一个好处是,您可以使MusicLibrary实现Serializable并将库保存到文件中。另外,您可以在MusicLibrary中放置一组MusicLibraries并拥有播放列表。各种选择。