为什么文件名必须和public修饰的类名称必须一致
来源:互联网 发布:linux 参数是引用类型 编辑:程序博客网 时间:2024/06/06 01:30
《Thinking in Java》解释
为Java 创建一个源码文件的时候,它通常叫作一个“编辑单元”(有时也叫作“翻译单元”)。每个编译单元都必须有一个以.java 结尾的名字。而且在编译单元的内部,可以有一个公共(public)类,它必须拥有与文件相同的名字(包括大小写形式,但排除.java 文件扩展名)。如果不这样做,编译器就会报告出错。每个编译单元内都只能有一个 public 类(同样地,否则编译器会报告出错)。那个编译单元剩下的类(如果有的话)可在那个包外面的世界面前隐藏起来,因为它们并非“公共”的(非public),而且它们由用于主public 类的“支撑”类组成。编译一个.java 文件时,我们会获得一个名字完全相同的输出文件;但对于.java 文件中的每个类,它们都有一个.class 扩展名。因此,我们最终从少量的.java 文件里有可能获得数量众多的.class 文件。如以前用一种汇编语言写过程序,那么可能已习惯编译器先分割出一种过渡形式(通常是一个.obj 文件),再用一个链接器将其与其他东西封装到一起(生成一个可执行文件),或者与一个库封装到一起(生成一个库)。但那并不是 Java 的工作方式。一个有效的程序就是一系列.class 文件,它们可以封装和压缩到一个 JAR 文件里(使用 Java 1.1 提供的 jar 工具)。Java 解释器负责对这些文件的寻找、装载和解释(注释①)。
①:Java 并没有强制一定要使用解释器。一些固有代码的Java 编译器可生成单独的可执行文件。
答案:
首先Java是被解释执行的。它在运行时并不是将所有的class文件全都放到内存中。而是在遇到import的时候才去相应的文件目录找相应的class文件。
对于一个public类,它是可以被项目中任何一个类所引用的,只需在使用它前import一下它所对应的class文件即可。将类名与文件名一一对应就可以方便虚拟机
在相应的路径(包名)中找到相应的类的信息。如果不这么做的话,就很难去找,而且开销也会很大。
为什么一个java源文件中只能有一个public类?
答案:
每个编译单元(文件)只能有一个public类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public类来表示。从软件架构设计和安全性设计上得出的结论。或者说是java的设计者们从这方面的考虑。或许这真的是一个规范
个人总结:
- 一个源文件(.java)里面没有用public修饰的类也可以和文件名一致。
- 源文件没有用public修饰的类主要是为public修饰的类”支撑”。
- 一个源文件中可以存在类名和文件名不一致的情况,但不能用public修饰.
- 如果一个包内不存在public修饰的类的话,那么我想这个包我觉得没有什么意义,因为不能为”客户程序员”提供接口,即使没有用public修饰的类里面含有public修饰了的静态方法,”客户程序员”也没有权限访问。
main方法不一定要在public修饰了的类下才能执行。但是main方法必须是public修饰的
有些文章说,用public修饰了的类里面才能调用main方法(程序的唯一入口),但我在没有用public修饰的类的情况下,JVM能执行mian方法。
6.最好不要在一个.java的源文件里写很多的类.
感谢
参考文章:
https://www.cnblogs.com/phpzxh/archive/2009/12/08/1619590.html
http://blog.csdn.net/waitforfree/article/details/51033457
- 为什么文件名必须和public修饰的类名称必须一致
- 关于为什么java中public修饰的类的类名和文件名要一致的个人看法
- java中文件名必须和类名一致吗
- Java的类名与文件名必须一致
- Java的类名与文件名必须一致
- JAVA的类名与文件名必须一致
- Java的类名与文件名必须一致
- Java的类名与文件名必须一致
- 为什么接口中的常量必须使用public static final修饰
- 为什么接口中的常量必须使用public static final修饰
- 为什么接口中的属性必须用public static final修饰?
- J2ME中主类的构造方法必须用public修饰
- 习惯把运行的class的名字作为文件名保存 如果文件中类是public修饰,那么类名必须和文件名相同 一个java文件中可以放几个public的类??? java变量:变量是用来标识一块内存的,变量必
- Java的文件名必须和公共类名相同
- registerReceiver和unregisterReceiver的调用者必须一致
- 用户输入的密码和确认密码必须一致
- 关于在 xmlSPY 出现的错误 DOCTYPE-EXternalID的名称必须既是SYSTEM 又是PUBLIC?
- java类中的main()方法必须是public static void 和有参数的
- 消息中间件之ActiveMQ 待更新
- Laravel 用户认证体系详解
- server 2012 安装.net3.5
- 网站公告==>>微信订阅号正式开通
- UndefinedError: parameter 'form' was not provided(关键词:flask/bug)
- 为什么文件名必须和public修饰的类名称必须一致
- windows编程(1)-句柄,内核对象
- 兼容IE透明度,IE7以及以下版本不加载
- 类模板——深入浅出
- JMS基本概念
- 函数传参(函数作为参数)
- Swift-Core Graphics绘图框架详解3(绘制渐变、填充渐变色)
- Qt线程间共享数据
- 第十三周作业