为什么一个java源文件中只能有一个public类,且该类要和java文件命名相同?

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.总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值