java虚拟机通过调用main()函数来运行程序,该main()函数的命名必须为public static void,且接受一个字符串数组作为参数
也就是说任何一个具有如上所述的main()的类都可以运行,且该main()函数不一定需要在public类中。
1.当java源文件中无public类时,那么虚拟机进行编译时生成多个class文件,但此时还不会编译报错,因为编译阶段只会直接去寻找具有main()函数的类,并以其为起点(但是运行的时候需要证明起点,也就是运行哪一个类)。
2.有public类,与源文件同名的public类中无main(),编译时直接生成多个class文件,但是还不会报编译错误,因为编译只检查变量和类型,运行时那么虚拟机首先寻找public类,因为public类相当于提供了一个对外的接口使得包外的文件也能调用该类(对于包类文件,有没有public修饰类,包类文件都能调用该源文件)。那么虚拟机找到该public类后去寻找其中的main()函数,若main()函数不在该类中,则会报错Error: Main method not found
3.有public类,但该类与源文件命名不一致,那么虚拟机相当于找不到从哪个类进入导致无法找到main(),编译报错。
4.总结: