JAVA、JVM、多种主要方法
我有两个类,每个类都有一个主方法,它将成为入口点的主类是RunPattern类。问题是,在RunPattern类中调用DataCreator.serialize(fileName)时,DataCreator类中的哪个方法将首先被调用?是main()方法还是serialize()?它与静态范围不同吗JAVA、JVM、多种主要方法,java,jvm,Java,Jvm,我有两个类,每个类都有一个主方法,它将成为入口点的主类是RunPattern类。问题是,在RunPattern类中调用DataCreator.serialize(fileName)时,DataCreator类中的哪个方法将首先被调用?是main()方法还是serialize()?它与静态范围不同吗 import java.io.File; import java.io.IOException; import java.io.Serializable; import java.io.Ob
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
public class RunPattern {
public static void main(String args[]){``// The first main() method
if(!new File("data.ser").exists()){
DataCreator.serialize("data.ser");
}
}
}
class DataCreator {
private static final String DEFAULT_FILE = "data.ser";
public static void main(String args[]){ // the second main
String fileName;
if(args.length == 1){
fileName = args[0];
}else{
fileName = DEFAULT_FILE;
}
serialize(fileName);
}
public static void serialize(String fileName){
try{
serializeToFile(createData(), fileName);
}catch(IOException exc){
exc.printStackTrace();
}
}
private static Serializable createData(){
ToDoListCollection data = new ToDoListCollectionImpl();
ToDoList listOne = new ToDoListImpl();
ToDoList listTwo = new ToDoListImpl();
ToDoList listThree = new ToDoListImpl();
listOne.setListName("Daily Routine");
listTwo.setListName("Programmer Hair Washing Product");
listThree.setListName("Reading List");
listOne.add("get up");
listOne.add("Brew cuppa java");
listOne.add("Read JVM Times");
listTwo.add("Latter");
listTwo.add("Rinse");
listTwo.add("Repeat");
listTwo.add("eventually throw too much conditioner");
listThree.add("the complete of duke");
listThree.add("how green was java");
listThree.add("URL, sweet URL" );
data.add(listOne);
data.add(listTwo);
data.add(listThree);
return data;
}
public static void serializeToFile(Serializable data, String fileName) throws IOException {
ObjectOutputStream serOut = new ObjectOutputStream(new FileOutputStream(fileName));
serOut.writeObject(data);
serOut.close();
}
}
DataCreator的主方法永远不会以这种方式调用
由于您通常是在IDE中开发,因此这是自动完成的。
但是您可以选择哪个main方法是您在Runconfiguration中的入口点。好的。如果您使用 java-cp。。。运行模式 然后调用
RunPattern
类的main
方法。这反过来又要求
DataCreator.serialize("data.ser");
它只调用
DataCreator
类的方法serialize
。这个类中的main
方法没有涉及。你应该告诉自己这是什么意思,我猜你在这里有一个基本的误解。我已经编辑了标记,我知道,当你调用DataCreator时,它与我这里的问题无关。serialize
它调用DataCreator
中的serialize
方法调用main()
没有什么神奇的事情发生。真正的问题是运行模式
类的意义是什么,你可以删除它,只使用DataCreator。因此,第二个main()方法的用途是什么?在另一个类中有另一个主方法的程序有什么用?如何调用另一个main方法?如果您愿意,您可以简单地调用另一个类的main
方法。我不知道它的目的,但阅读它的代码。。。您可以将文件名作为参数传递给它,而方法RunPattern.main
看起来更像是带有硬编码文件名的测试类。@edgards通常,“main”主类写在清单文件中,清单文件将是.jar文件的入口点。但是您也可以通过使用java-cp package.class
显式调用特定类中的main来访问另一个main方法。一个用例可能是您正在制作一个自调用jar,以防止jar阻塞另一个应用程序?在另一个类中有另一个主方法的程序有什么用?我该如何称呼另一种主要方法呢?下面SeelenVirtuse的帖子或多或少已经回答了这个问题。一般来说,拥有一个以上的主要方法是没有实际用途的。您可以像调用任何其他静态函数一样调用另一个main方法。main(新字符串[]{“testfile.txt”});