这个问题的根本就是在说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:} |