Java类库:包
- Java 的源代码文件
- package 关键字
- Java 解释器
Java 的源代码文件
当编写一个 Java 源代码文件时,这个文件通常被称为编译单元,也就是类文件。每个编译单元都必须有一个后缀名 .java,而在编译单元里面有且仅有一个 public 类,多的编译器不收,这个 public 类的名称必须与编译单元的文件名相同。
package 关键字
当编译一个 .java 文件时,在 .java 文件中的每个类(包括 public 和非 public)都会有一个输出文件,该输出文件与 .java 文件中每个类的名称相同,只是多了一个后缀名 .class。所以在编译少量的 .java 文件后会得到大量的 .class 文件。
类库实际上是一组类文件。其中每个文件都有一个 public 类和任意数量的非 public 类,因此每个文件都是一个构件。如果希望这些构件(包括 .java 和 .class 文件)从属于一个群组,那么就可以使用关键字 package。package 的语法很简单,它必须是类文件中除了注释之外的第一行代码,并且全部使用小写字母,如下:
package com.model;
public class Pet {
}
这就声明了该类文件 Pet 是名为 com.test 的类库的一部分(当然,对于现在的开发者而言,已经不会手动去使用 package 关键字了,这都交给开发工具 eclipse 或者 idea 去完成了,具体可参考文章 Java 程序的构建)。任何不属于该类库的类文件并且想要使用该类文件都必须指定包的全名或者使用 import 关键字。
package com.test;
public class MyTest {
public static void main(String[] args) {
//通过指定全名来调用
com.model.Pet pet = new Pet();
}
}
或者
package com.test;
//关键字 import 使调用变得更加简洁
import com.model.Pet;
public class MyTest {
public static void main(String[] args) {
Pet pet = new Pet();
}
}
Java 解释器
创建项目的时候,类文件不可能杂乱无章的放在一起,不便维护,不便查找,因此我们习惯将特定的类文件放在同一个目录下。这个目录可以帮我们解决两个问题:创建一个独一无二的名称,查找有可能隐藏于目录结构中某处的类。
Java 解释器的运行情况如下:首先,找出环境变量 CLASSPATH,这个变量可以通过安装 JDK 来设置,CLASSPATH 包含一个或者多个目录,用作查找 .class 文件的根目录。从根目录开始,解释器获取包的名称并将每个点替换成反斜杠,从而产生一个以 CLASSPATH 为根目录的一个路径名称,例如:package com.model 就变成 com\model 或 com/model 或者其他,这取决于操作系统。这样解释器就可以从这些目录中查找与类相关的 .class 文件。
当编译器碰到 model 库的 import 语句时,就开始在 CLASSPATH 所指定的目录中查找,查找子目录 com\model,然后从以编译的文件中找出名称相符者,对 Pet 而言就是 Pet.class。