-1

我有一个类字典。它只是读取一个包含一些单词的文本文件(从 main 方法)并将它们存储在一个哈希集中。该类还有一个方法“contains”(静态),它检查 Hashset 是否包含给定的单词并返回一个布尔值。Hashset 变量也被定义为静态的。

现在,如果我有另一个程序并且我调用静态方法“包含”,那么 Dictionary 类的“main”方法是否运行?在我的程序中,它似乎没有运行,因为 Dictionary 是空的(所有对 contains 方法的调用都返回 false)。如何确保运行 main 方法并填写字典?

当然,我可以使方法非静态并创建一个字典对象,或者在我的调用程序中创建字典作为内部类。但只是想知道是否有更好的方法来做到这一点。

如果需要,我会分享代码。

PS:字典类在独立运行时运行良好,并且对“包含”方法的调用也可以正常运行。

private static Set<String> dictionary = new HashSet<String>();

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
        System.out.println("Reading dictionary....");
        FileReader fr = new FileReader("dictionary.txt");
        BufferedReader br = new BufferedReader(fr);
        String s;
        while((s = br.readLine()) != null){
            dictionary.add(s);
        }
        br.close();
        fr.close();
    }catch(IOException ioe){
        ioe.printStackTrace();
    }
    System.out.println("Dictionary contains the following words");
    for(String s : dictionary){
        System.out.println(s);
    }
}
public static boolean contains(String inpword){
    //String[] args = new String[0];
    //main(args);
    if(dictionary.contains(inpword))
        return true;
    return false;
}
4

3 回答 3

2

否:调用类的静态方法不会运行其main()方法。

于 2013-08-06T02:58:03.140 回答
2

main 方法并不总是必要的。我可以建议您使用数组为字典创建一个迷你数据库。将物品放入其中,然后调用它们。这样更容易。

此外,非静态 void 方法不适用于静态方法。

于 2013-08-06T03:03:18.243 回答
1

如果我有另一个程序并且我调用静态方法“包含”,那么 Dictionary 类的“main”方法是否运行?

不,不是的。

在我的程序中,它似乎没有运行,因为 Dictionary 是空的(所有对 contains 方法的调用都返回 false)。如何确保运行 main 方法并填写字典?

您可以显式调用 Dictionary 类main方法。例如:

    public class OtherClass {
        ....
        public static void main(String[] args) {
            ...
            Dictionary.main(args);  // ... or provide a different argument list
            ...
        }
    }

但这是一个坏主意,因为Dictionary.main(如目前所写)除了初始化字典之外还做了更多。您很可能确实希望将字典写入标准输出...

Dictionary更面向对象会是一个更好的主意:

  • 使dictionary变量非静态
  • 使contains方法非静态
  • 将初始化代码移动到构造函数中
  • 使该Dictionary.main方法创建一个Dictionary实例...

然后你可以编写OtherMethod类,以便它创建和使用一个Dictionary实例。


作为一般规则,一个类不需要“main”方法。您应该只为作为应用程序真正入口点的类提供一个。

包括用于测试的“主要”是老式的。单独实现测试代码和工具是一个更好的主意;例如,使用 JUnit 或 TestNG 之类的测试框架。

于 2013-08-06T05:55:32.193 回答