1. Java 中组织类和接口的方式以及原因
- 包,为了避免命名冲突
- Java API 中所有的类和接口都位于包 Java 或 javax 下,Java 是标准包,javax 是扩展包
2. 怎样声明一个包名
- 通过关键字
package
声明一个包名 - 包声明语句应该位于源代码的最前面,前面不能有注释以外的其他语句
3. java.lang
包下的类的使用特点是
java.lang
包下的类可以直接使用,不需要引入也不需要使用完全限定名- 比如
String
类、System
类,其他包内的类则不行
4. import
语句的使用位置
import
语句需要放在package
定义之后,类定义之前
5. 能递归导入吗
- 不能
6. 静态导入的使用特点
- 静态导入不应过度使用,否则难以区分访问的是哪个类的代码
7. Java 中可见性范围是
- 从大到小是:
public > protected > package(默认)> private
- 很多编程规范里不建议使用默认,因为容易导致是程序员忘记还是故意这种场景下的混淆
8. 怎样理解程序的编译与链接
- 从 Java 源代码到运行的程序,有编译和链接两个步骤
- 编译是将源代码文件变成扩展名是
.class
的一种字节码,这个过程一般是由 javac 命令完成的 - 链接是在运行时动态执行的,
.class
文件不能直接运行,运行的是 Java 虚拟机。虚拟机是一种特殊的程序,执行的就是 java 命令,这个命令解析.class
文件,转换为计算机能识别的二进制代码,然后运行 - 所谓链接(验证、准备、解析)就是根据引用到的类加载相应的字节码并执行。
import
是编译时概念,用于确定完全限定名,在运行时,只根据完全限定名寻找并加载类,编译和运行时都依赖类路径(classpath),类路径中的jar
文件会被解压缩用于寻找和加载类
9. Java 9 中的模块的概念
- 在 Java 9 中,清晰地引入了模块的概念,JDK 和 JRE 都按模块化进行了重构
- 传统的代码组织机制依然是支持的,但新的应用可以使用模块。一个应用可有多个模块组成,一个模块可由多个包组成
- 模块之间可以有一定的依赖关系,一个模块可以导出包给其他模块使用,可以提供服务给其他模块使用,也可以使用其他模块提供的包和调用其他模块提供的服务
- 对于复杂的应用,模块化有很多好处,比如更强的封装、更为可靠的配置、更为松散的耦合、更动态灵活