-
每个类都可以有一个main(),哪个起作用取决于把哪个类当做主类。一个类是否需要main()取决于这个类是否需要作为外部执行的入口(包括测试用途的入口)。
-
你可以调用只有包(默认)访问权限的类的main(),这样便于测试程序对每个类进行测试(当然,使用junit后你可能不需要使用main()进行测试)。
-
main()方法是一个static方法,所以main不能调用本类中的非静态成员和方法,如果需要调用,必须通过new一个对象来调用。
main方法的签名只能是这种形式:
public static void main(String[] args)
public static void main(String... args) // on java8
Q1:为什么必须是static?
如果main方法不声明为静态的,JVM就必须创建main所在类的实例,因为构造器可以被重载,JVM就没法确定调用哪个main方法。
Q2:为什么必须是public?
如果不是public,外部根本无法访问(protected和包访问权限,也只限于本包内能够访问),不管是不是静态方法。
Q3:为什么返回必须是void?
因为加返回值没意义,难道还指望jvm收到你的返回值帮你做点事情?
Q4: 为什么参数必须是String数组?
这个问题是最复杂的,尝试回答一下,不对的请指正,接下来还要继续深挖一下原理。
java的main和C的mian不是对等的关系,java的main跟C的__libc_start_main(gcc)和mainCRTStartup(MSVC)对等。
网友评论