为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
一般情况下,包名采用公司域名的倒写来命名,比如 com.baidu,com.alibaba。包名在我们的操作系统中就对应于 ./com/baidu
, ./com/alibaba
这样的文件夹目录结构。
新建两个测试用例,其中一个 class 会调用另一个 class 里的方法
我这里在 E:/java/06
目录下新建了两个类 ClacLogic.java
和 Clac.java
。
package clacapp.logics; //定义 ClacLogic 类在包 clacapp/logics 下 public class ClacLogic { public static int tasu(int a, int b) { return a + b; } public static int hiku(int a, int b) { return a - b; } } 复制代码
package clacapp.main; //定义 Clac 类在包 clacapp/main 下 import clacapp.logics.ClacLogic; //因为 ClacLogic 不和 Clac 同一包,所以使用时需要导入 public class Clac { public static void main(String[] args) { int a = 10; int b = 2; int total = ClacLogic.tasu(a, b); //调用 ClacLogic 的 tasu 方法 int delta = ClacLogic.hiku(a, b); //调用 ClacLogic 的 hiku 方法 System.out.println("plus is " + total + " ,minus is " + delta); } } 复制代码
第一步已经建好了两个 .java 文件。
进行编译
对上一步建好的两个 java 文件进行编译,这里需要注意,不能直接使用 javac xxx.java
命令(具体为何可以自己尝试并思考),要使用 javac -d 路径 xxx.java
。
先来到之前创建的 .java 文件当前目录,我这里是 E:/java/06
。然后分别执行命令 javac -d . ClacLogic.java
和 javac -d . Clac.java
(注意先后顺序)。
在命令执行完成后,会看到自动生成了名为 clacapp
的目录,该目录下又存在两个目录 logics
和 main
,里面则是我们编译出来的 ClacLogic.class
和 Clac.class
文件。到这里你是否发现了我们一开始写在 .java
文件中第一行的 package xxx.xxx;
与 Java 进行编译时的联系呢。
javac -d 目录 xxx.java
命令中 目录
的含义是你想让编译后自动生成的文件夹从哪个目录开始, .
就代表当前目录,也就是告诉编译器在 E:/java/06
下创建对应的 package 。
执行 .class
文件
这一步也需要注意,之前使用 java xxx
命令运行 .class
文件就可以了,但是使用带有 package 编译出来的 .class 文件,需要来到 package 的上层目录(可以类比为项目根目录),这里也就是 E:/java/06
。在当前目录运行 java clacapp.main.Clac
,看到输出结果: plus is 12 ,minus is 8
。