Skip to content

包机制

Java 的包机制(Package)是 Java 用来组织类和接口的一种命名空间机制,类似于操作系统中的文件夹。它主要用于解决类名冲突、代码管理、访问控制等问题。

包命名规范

com.company.project.service

这是一个典型的包名,表示层级结构:

com
 └── company
      └── project
           └── service

包命名规范:

  • 公司域名倒写+项目名+模块
  • 包名只能使用小写字母
  • 多个单词使用-连接
com.alibaba.oa.empgt.controller

定义包

在 Java 文件的第一行使用 package 关键字定义包。

java
package com.example.demo;

public class UserService {

}

这表示 UserService 类属于:

com.example.demo

有了包机制后,完整的类名是包含包名的

com.example.UserService

带包编译

在 Java 中,如果类声明了 package,编译时就叫做带包编译。带包编译的核心是:编译后的 .class 文件需要按照包结构生成目录

java
package com.test.demo;

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello Java");
    }

}

直接编译,会直接生成:Hello.class。

javac Hello.java

但是Hello.class中记录的完整类名是com.test.demo.Hello

java Hello //Could not find or load main class Hello
java com.test.demo.Hello //Could not find or load main class com.test.demo.Hello

JVM 会根据类名解析路径:

com.test.demo.Hello

com/test/demo/Hello.class

也就是 JVM 会去找:

./com/test/demo/Hello.class

但是实际文件存放位置是./Hello.class因此JVM无法加载字节码文件


使用 -d 参数指定输出目录。-d表示按照package结构在当前目录生成class文件

javac -d . Hello.java

将会生成如下目录结构:

.
└── com
    └── test
        └── demo
            └── Hello.class

运行时必须使用全限定类名

java com.test.demo.Hello
Hello Java

导入包

如果要使用其他包中的类,需要使用 import