从类B调用类A的静态方法时,类A的主方法是否运行?

时间:2013-08-06 02:54:12

标签: java main

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

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

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

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

PS:Dictionary类在独立运行时运行正常,并且调用“contains”方法也可以正常工作。

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;
}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

  

如果我有另一个程序并且我调用静态方法“contains”,那么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实例。


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

包括用于测试的“主要”是老式的。最好是分别实现测试代码和线束;例如使用像JUnit或TestNG这样的测试框架。