A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个java源文件最多只能有一个public类,为什么?

public的意义是对别的包可见或者对虚拟机可见。如果同一个源文件内有两个public的类,那么其一是不必要的。因为package语句规定他们在同一包内,而package语句只能有一句。

这样的理由显然没有足够的说服力。

有谁能够从java的编译细节彻底谈一下为什么一个java源文件最多只能有一个public类。从java的设计,虚拟机的细节谈一下。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人鼓励一下~

查看全部评分

9 个回复

倒序浏览
本帖最后由 牛合超 于 2013-3-4 21:31 编辑


这个以前有讨论,,
回复 使用道具 举报
http://topic.csdn.net/t/20060528/22/4784755.html 这个帖子我看过。希望不要有人从这里面给我参考。
回复 使用道具 举报
以下内容引自
http://blog.csdn.net/bareheadzzq/article/details/6562211
《深入jvm第二版》中有这样一句话:
java虚拟机实例通过调用某个类的main()来运行一个Java程序,而这个main()必须是public
static void 并接收一个字符串数组作为参数,任何拥有这样一个main()的类都可以作为java程
序的起点。
并没有说拥有main()方法的类一定要是public类。
回复 使用道具 举报
我认为http://blog.csdn.net/bareheadzzq/article/details/6562211里面讲的还是不错的。
所以总结如下:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必
须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。
至于main()不是必须要放在public类中才能运行程序。
以上是通过实验得出的结论,个人认为到这里已经可以了,如果一定要追问到底,可能要问问java
平台的设计者了。或许,人家会说:这是java的设计和jvm的内部体系结构设计造成,这是一个规
范,没有为什么。
回复 使用道具 举报
赞一个{:soso_e179:}
回复 使用道具 举报
感觉没必要纠结这个问题,关于为什么只能定义一个public类,在我学习java的第一堂课我就牢牢的记住了命名规则
回复 使用道具 举报
我好像没写过private class 很少写public字段 经常写public方法
回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-3-7 13:42 编辑

楼主的答案简单明了,一语中的,只是感觉楼主问问题的语气好强硬,并且最后也是自问自答的。提个小小的建议,至少我看到这样的帖子,心情不会太好就是了~ 如果是请教问题,请心平气和;如果是想分享自己的想法和经验,帖子的分类不要定成【未解决】~  帮你修改分类了,望下次注意~
回复 使用道具 举报
陈丽莉 发表于 2013-3-7 13:41
楼主的答案简单明了,一语中的,只是感觉楼主问问题的语气好强硬,并且最后也是自问自答的。提个小小的建议 ...

我感到惭愧和不安。谢谢您的指正。我会注意的。第一次发帖,没什么经验。下次我发帖时一定考虑读者的心情,多换位思考。我的语气的确太不友好了,可是事实上我是个很随和很友好的人。再次感谢您。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马