转载

Java中package的概念及实践(不使用IDE)

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用:

  1. 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  2. 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  3. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

一般情况下,包名采用公司域名的倒写来命名,比如 com.baidu,com.alibaba。包名在我们的操作系统中就对应于 ./com/baidu./com/alibaba 这样的文件夹目录结构。

二、不通过 IDE 来进行 package 的编译和运行

  1. 新建两个测试用例,其中一个 class 会调用另一个 class 里的方法

    我这里在 E:/java/06 目录下新建了两个类 ClacLogic.javaClac.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 文件。

  1. 进行编译

    对上一步建好的两个 java 文件进行编译,这里需要注意,不能直接使用 javac xxx.java 命令(具体为何可以自己尝试并思考),要使用 javac -d 路径 xxx.java

    先来到之前创建的 .java 文件当前目录,我这里是 E:/java/06 。然后分别执行命令 javac -d . ClacLogic.javajavac -d . Clac.java (注意先后顺序)。

    在命令执行完成后,会看到自动生成了名为 clacapp 的目录,该目录下又存在两个目录 logicsmain ,里面则是我们编译出来的 ClacLogic.classClac.class 文件。到这里你是否发现了我们一开始写在 .java 文件中第一行的 package xxx.xxx; 与 Java 进行编译时的联系呢。

    javac -d 目录 xxx.java 命令中 目录 的含义是你想让编译后自动生成的文件夹从哪个目录开始, . 就代表当前目录,也就是告诉编译器在 E:/java/06 下创建对应的 package 。

  2. 执行 .class 文件

    这一步也需要注意,之前使用 java xxx 命令运行 .class 文件就可以了,但是使用带有 package 编译出来的 .class 文件,需要来到 package 的上层目录(可以类比为项目根目录),这里也就是 E:/java/06 。在当前目录运行 java clacapp.main.Clac ,看到输出结果: plus is 12 ,minus is 8

原文  https://juejin.im/post/5cedf64e5188252c023f94ca
正文到此结束
Loading...