我有一个类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这样的测试框架。