黑马程序员技术交流社区

标题: [已解决]一个文件中只能有一个public class 的相关问题 [打印本页]

作者: 于紫洋    时间: 2012-3-16 11:19
标题: [已解决]一个文件中只能有一个public class 的相关问题
本帖最后由 于紫洋 于 2012-3-16 16:29 编辑

一个文件中只能有一个public class这是知道了,然后接下来的问题是
1,如果文件中只有一个类public是不是一定要写
2,如果文件中只有一个类且不写public是不是能调用
3,如果文件中有多个class,且都没有main方法是否允许
4,如果文件中有多个class,且没有public class,则文件名字是否没限制
5,为什么文件名要与public class名相同(其实这个应该是1)
作者: 冯建鹏    时间: 2012-3-16 13:50
1.public 是个权限修饰符,加与不加只是为了让这个类是不是想让所有类调用。只有一个类,也不一定要加public关键字的
2.你说的调用要看是怎么样调用了不加public的话是默认权限,默认权限的话别的包中的类就无法访问到该类,必须本包中的类才能访问到该类。
3一个文件里面有多个class,没有main方法这也是运行的,main方法只不过是保证该类的独立运行而已,比如定义一个类不需要独立运行,而是让别的类调用下里面的函数,就不用定义main方法
4.  5 我就不太清楚了
作者: 于紫洋    时间: 2012-3-16 14:40
所以说一般大点的程序类文件一般都要被别的包文件调用,所以一般都要加public么?
然后加public能跨包掉用,没public不能挎包掉用,所以一般不会在一个文件里写多个class文件么?
作者: 张润政    时间: 2012-3-16 15:38
这个问题的根本就是在说public修饰类和函数的规则
public是一个公有权限修饰符。它能够修饰类和函数。对于你说的这个问题我也分成你对应的几点来说吧。
1,如果文件中只有一个类,那么public也不一定要写,根据你的需要了。比如我们写了一个程序,这个程序只有一个文件,那么这个类中一定要有一个public的主函数,作为程序入口。它所在的类可以不声明为public的,但是你的文件名一定要跟这个类名相同吧,否则jvm找不到文件。编译就会报错说找不到指定的加载文件。如果你写的程序中存在多个分开的文件(这个存放你写的多个文件的文件夹就是一个程序包),那么在其中一个文件中你写了一个准备被调用的类,那么这个类可以声明为public,或者不声明为public的也可以,可以声明为protected,或者default都行,同一个包中,都可以访问的到

2,如果文件中只有一个类,且不写public是不是能调用的问题,这个当然也是可以的,如果第一点你明白了,这一点应该稍加推理就通了。如果程序只有一个文件,那么这个public写不写都行。如果程序中文件多了,其中一个文件里只有一个类,不是public的,你可以声明为protected,或者default都行,同一个包中,都可以访问的到

3,如果文件中有多个class,且都没有main方法是否允许,这个问题当然是允许的,在我们的一个程序包中,我们通常只有一个文件中存在程序的入口,也就是main函数,其他文件中存放的都是一些被主函数或者其他对象调用的类。

4,如果文件中有多个class,且没有public class,则文件名字是否没限制,说到这个问题,如果你的这个文件中存在多个class,没有public的,且这几个类中都没有主函数的入口,那么它的文件名你随便起。如果有一个类中存在main函数,那么文件名就必须跟这个类相同。否则编译是可以通过的,但是运行可就报错了,找不到程序的入口。

5,为什么文件名要与public class名相同(其实这个应该是1),在一个文件中,如果你确实需要声明其中一个类是公有的话,因为一个文件中最多只能有一个类是公有的,那么你必须让文件名跟这个类名相同,因为这个是类的最大权限,当jvm加载的时候,当然会去加载这个公有权限的类,否则就会编译失败,如果你这个文件中还存在主函数,那么你一定要把主函数放在公有类中,若果你放在了不是公有的类里边,那么jvm就找不到这个入口,编译没有问题,但是一旦运行了,就会报错。就是因为找不到程序入口。所以就不能运行程序。

请笑纳{:soso_e128:}
作者: 于紫洋    时间: 2012-3-16 16:31
多谢几位前辈,很详细很详细




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