java的main函数

  1. 每个类都可以有一个main(),哪个起作用取决于把哪个类当做主类。一个类是否需要main()取决于这个类是否需要作为外部执行的入口(包括测试用途的入口)。

  2. 你可以调用只有包(默认)访问权限的类的main(),这样便于测试程序对每个类进行测试(当然,使用junit后你可能不需要使用main()进行测试)。

  3. 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)对等。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容