JAVA、JVM、多种主要方法

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

我有两个类,每个类都有一个主方法,它将成为入口点的主类是RunPattern类。问题是,在RunPattern类中调用DataCreator.serialize(fileName)时,DataCreator类中的哪个方法将首先被调用?是main()方法还是serialize()?它与静态范围不同吗

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