Java 允许使用包(package)将类组织起来。借助于包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。使用包的主要原因是确保类名的唯一性。标准的 Java 类库分布在多个包中,包括 java.lang、java.util 和 java.net 等。
标准的 Java 包具有一个层次结构。如同硬盘的目录嵌套一样,也可以使用嵌套层次组织包。所有标准的 Java 包都处于 java 和 javax 包层次中。
类的导入
一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。我们可以采用两种方式访问另一个包中的公有类。第一种方式是在每个类名之前添加完整的包名。
java.time.LocalDate now = java.time.LocalDate.now();
这显然很繁琐。更简单且更常用的方式是使用 import 语句。import 语句是一种引用包含在包中的类的简明描述。一旦使用了 import 语句,在使用类时,就不必写出包的全名了。
可以使用 import 语句导入一个特定的类或者整个包。import 语句应该位于源文件的顶部(但位于 package 语句的后面)。例如,可以使用下面这条语句导入 java.util 包中所有的类。
import java.time.*;
然后,就可以使用:
LocalDate now = LocalDate.now();
而无须在前面加上包前缀。还可以导人一个包中的特定类:
import java.time.LocalDate;
静态导入
import 语句不仅可以导人类,还增加了导人静态方法和静态域的功能。
例如,如果在源文件的顶部,添加一条指令:
import static java.lang.System.*;
就可以使用 System 类的静态方法和静态域,而不必加类名前缀:
out.println("Hello World");
另外,还可以导入特定的方法或域:
import static java.lang.System.out;
将类放入包中
要想将一个类放人包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。
如果没有在源文件中放置 package 语句,这个源文件中的类就被放置在一个默认包(defaulf package)中。默认包是一个没有名字的包。在此之前,我们定义的所有类都在默认包中。
包作用域
标记为 public 的部分可以被任意的类使用;标记为 private 的部分只能被定义它们的类使用。如果没有指定 public 或 private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。