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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋美成 中级黑马   /  2014-3-28 18:09  /  1366 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在一个程序里面定义了两个public的类,然后就是编译通不过,这是什么原理啊?
一个public class A;   然后是public class B,总是报错说“公用类型B必须在它自己的文件中定义”;这个怎么破,莫非一个程序里面不允许出现两个public类吗,好奇怪啊

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

7 个回复

正序浏览
其实对于java编译器,一个java文件就是一个编译单元,不管编译成了多少个class文件,这些个class文件还是一个整体,如果这个java文件中的类都没有public关键字,那么无所谓,只要某个类具有访问权限或是main,就可以进入,执行这块代码。 但是一旦某个类名前有了public关键字,这个类就具有了包访问权限,相当于这个块要为外界提供一个调用的入口,可能是一些底层机制的问题(很可能是为了简化JVM的执行机制?),这个入口只能有一个,并且这个public类的名字必须与编译单元也就是java文件名相同(还是简化机制的问题?)。同一个包或路径下调用哪个类均无所谓,无视public或是没有public,但是包外的代码要调用的话,就只有找这个唯一的public入口了。大概是这样。。。。。
回复 使用道具 举报
是的!一个Java文件中允许出现多个class, 但是只能有一个class能用public来修饰, 如果中间有main主方法的话, 那么这个主方法只能写在public 修饰的class中, 编译和运行的时候是public 的class
回复 使用道具 举报
在一个类中可以有好多内部类,只能有一个类的名字和源文件名相同
回复 使用道具 举报
宋美成 发表于 2014-3-28 18:17
兄弟,你好,我抽到了一道程序阅读,他里面有两个public类,问我程序的运行结果,怎么破,我是直接说程序 ...

直接说编译报错,然后说下为什么,多写点注释,测试题很容易得高分的
回复 使用道具 举报
你好,在一个java源文件里只允许出现一个public的类,其它的都是默认类型,而且java源文件的名称必须和public的java类的类名一样,如果只有一个默认类型的java类,那么源文件名称任意;
如 :
在一个源文件里有两个类:
public class A{...}
class B{...}\\完整,default class B ,但是default一般不写
则源文件名称必须为:A.java

如果在一个源文件里有一个类:
class B{...}
源文件名称任意,只要符合命名规范即可

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
630681386@qq.co 发表于 2014-3-28 18:15
在一个java文件中可以有多个class但只能有一个public,这也是一个面试题

兄弟,你好,我抽到了一道程序阅读,他里面有两个public类,问我程序的运行结果,怎么破,我是直接说程序不能定义两个public类吗?
回复 使用道具 举报
在一个java文件中可以有多个class但只能有一个public,这也是一个面试题

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马