黑马程序员技术交流社区

标题: 编译的时候为啥总出错 [打印本页]

作者: 宋美成    时间: 2014-3-28 18:09
标题: 编译的时候为啥总出错
我在一个程序里面定义了两个public的类,然后就是编译通不过,这是什么原理啊?
一个public class A;   然后是public class B,总是报错说“公用类型B必须在它自己的文件中定义”;这个怎么破,莫非一个程序里面不允许出现两个public类吗,好奇怪啊

作者: 630681386@qq.co    时间: 2014-3-28 18:15
在一个java文件中可以有多个class但只能有一个public,这也是一个面试题
作者: 宋美成    时间: 2014-3-28 18:17
630681386@qq.co 发表于 2014-3-28 18:15
在一个java文件中可以有多个class但只能有一个public,这也是一个面试题

兄弟,你好,我抽到了一道程序阅读,他里面有两个public类,问我程序的运行结果,怎么破,我是直接说程序不能定义两个public类吗?
作者: 1453149997    时间: 2014-3-28 18:18
你好,在一个java源文件里只允许出现一个public的类,其它的都是默认类型,而且java源文件的名称必须和public的java类的类名一样,如果只有一个默认类型的java类,那么源文件名称任意;
如 :
在一个源文件里有两个类:
public class A{...}
class B{...}\\完整,default class B ,但是default一般不写
则源文件名称必须为:A.java

如果在一个源文件里有一个类:
class B{...}
源文件名称任意,只要符合命名规范即可
作者: 630681386@qq.co    时间: 2014-3-28 18:21
宋美成 发表于 2014-3-28 18:17
兄弟,你好,我抽到了一道程序阅读,他里面有两个public类,问我程序的运行结果,怎么破,我是直接说程序 ...

直接说编译报错,然后说下为什么,多写点注释,测试题很容易得高分的
作者: 赵小豪    时间: 2014-3-28 20:24
在一个类中可以有好多内部类,只能有一个类的名字和源文件名相同
作者: 亓华森    时间: 2014-3-28 21:30
是的!一个Java文件中允许出现多个class, 但是只能有一个class能用public来修饰, 如果中间有main主方法的话, 那么这个主方法只能写在public 修饰的class中, 编译和运行的时候是public 的class
作者: 亓华森    时间: 2014-3-28 22:01
其实对于java编译器,一个java文件就是一个编译单元,不管编译成了多少个class文件,这些个class文件还是一个整体,如果这个java文件中的类都没有public关键字,那么无所谓,只要某个类具有访问权限或是main,就可以进入,执行这块代码。 但是一旦某个类名前有了public关键字,这个类就具有了包访问权限,相当于这个块要为外界提供一个调用的入口,可能是一些底层机制的问题(很可能是为了简化JVM的执行机制?),这个入口只能有一个,并且这个public类的名字必须与编译单元也就是java文件名相同(还是简化机制的问题?)。同一个包或路径下调用哪个类均无所谓,无视public或是没有public,但是包外的代码要调用的话,就只有找这个唯一的public入口了。大概是这样。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2