我有一个班级词典。它只读取包含一些单词的文本文件(来自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;
}
答案 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这样的测试框架。