java包是命名空间与目录结构的统一,必须在源文件顶部声明;import简化跨包调用,但同名类需用全限定名;包结构按域名倒序和职责分层设计,体现模块化规范。

Java 中类与对象的组织离不开包(package)机制,它不是可选项,而是项目规范的核心部分。导入与管理不同类的关键,在于理解“包是命名空间+目录结构”的双重本质,并配合 import 合理使用。
包的定义与声明必须前置
每个 Java 源文件顶部(注释之后、类定义之前)必须用 package 声明所属包。例如:
-
package com.example.user;表示该类属于com.example.user包; - 对应磁盘路径必须是
src/com/example/user/ClassName.java; - 不写
package就属于默认包,严禁用于正式项目——无法被其他包 import,也不支持模块化管理。
import 用于简化跨包类的调用
当你要在当前类中使用其他包里的类时,用 import 告诉编译器“这个类我打算直接用名字访问”。比如:
-
import java.time.LocalDate;→ 后续可直接写LocalDate.now(); -
import java.util.*;→ 导入java.util下所有公开类(不推荐大面积使用,易引发命名冲突); -
java.lang包自动导入(如String、System),无需显式写 import。
同名类冲突时必须用全限定名
如果两个不同包里有同名类(如 com.a.User 和 com.b.User),且都被 import,编译器会报错。此时只能保留一个 import,另一个必须用全限定名调用:
- ✅ 正确:
com.a.User u1 = new com.a.User(); - ✅ 正确:
import com.b.User;+User u2 = new User(); - ❌ 错误:同时 import 两者又只写
User。
包结构体现模块职责,不是随意嵌套
包名通常按域名倒序 + 功能分层设计,例如 com.mycompany.order.service 和 com.mycompany.order.model,它们彼此独立,没有父子继承关系:
-
com.mycompany.order和com.mycompany.order.service是两个完全不同的包; - 划分依据是职责:model 存实体类,service 存业务逻辑,dao 存数据库操作;
- 这种结构让团队协作更清晰,也便于 IDE 自动识别依赖和生成代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











