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



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

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

当然,我可以使该方法非静态,并创建一个dictionary对象,或者在调用程序中将dictionary创建为内部类。但我只是想知道是否有更好的方法。

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

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

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

主方法并不总是必需的。我可以建议你用数组为字典创建一个小型数据库吗。将项目放入其中,然后调用它们。那样比较容易。

此外,非静态void方法不能与静态方法一起使用。

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


一般来说,类不需要"main"方法。您应该只为类提供一个,该类是应用程序的真正入口点。

包括一个"主要"测试是过时的。最好将测试代码和线束分别实现;例如使用像JUnit或TestNG这样的测试框架。

相关内容

  • 没有找到相关文章