Java快速入门:包(Package)与导包(import)详解
一、包(Package)的概念
作用:
- 避免命名冲突:不同包中可存在同名类
- 组织管理类:将功能相关的类组织在一起(如
java.util
集合类) - 访问控制:配合访问修饰符实现封装
- 模块化开发:便于团队协作与代码复用
命名规范:
- 全小写字母(如
com.example.utils
) - 域名倒序(如
com.google.common
) - 不能使用Java关键字(如
int
、class
)
二、包的定义与使用
定义包(必须在文件首行):
// 文件路径:src/com/example/utils/StringUtil.java
package com.example.utils; // 包声明public class StringUtil {public static String reverse(String str) {return new StringBuilder(str).reverse().toString();}
}
目录结构:
src
└── com└── example└── utils├── StringUtil.java└── MathUtil.java
三、导包(import)的三种方式
导入单个类(推荐)
import com.example.utils.StringUtil;public class Main {public static void main(String[] args) {System.out.println(StringUtil.reverse("Hello"));}
}
导入整个包(谨慎使用)
import com.example.utils.*; // 导入utils包所有类public class Main {public static void main(String[] args) {System.out.println(StringUtil.reverse("ABC"));System.out.println(MathUtil.add(1, 2));}
}
完全限定名(无需import)
public class Main {public static void main(String[] args) {// 直接使用包名+类名System.out.println(com.example.utils.StringUtil.reverse("Java"));}
}
四、特殊导包场景
静态导入(导入类的静态成员)
import static java.lang.Math.PI; // 导入常量
import static java.lang.Math.pow; // 导入静态方法public class Circle {double area(double radius) {return PI * pow(radius, 2); // 直接使用}
}
静态导入是 Java 5 引入的特性,主要作用是省略类名前缀直接访问静态成员,通过 import static
语法实现。它在特定场景下能显著提升代码的简洁性和可读性。
核心作用:
简化静态成员调用
普通导入:
类名.静态成员
静态导入:
直接使用静态成员
提升数学/工具类代码可读性
数学公式、常量引用等场景更接近自然书写方式
避免重复书写类名
对高频使用的静态成员(如常量、工具方法)减少冗余代码
静态导入是把双刃剑,恰当使用能使代码更简洁优雅,但滥用会导致可维护性下降。建议在常量引用、数学计算和测试断言等场景有限使用,并遵循团队编码规范。
处理同名类冲突
import com.companyA.Utils;
import com.companyB.Utils; // 错误!编译器无法区分// 解决方案:使用完全限定名
public class Demo {void test() {com.companyA.Utils.doSomething();com.companyB.Utils.doSomething();}
}
五、Java核心包概览
Java 的标准库包含丰富的核心包,为开发者提供了强大的基础功能。
包名 | 功能描述 | 常用类示例 |
---|---|---|
java.lang | 语言核心类(自动导入) | String, System, Math |
java.util | 工具类/集合框架 | ArrayList, HashMap |
java.io | 输入输出操作 | File, InputStream |
java.net | 网络编程 | Socket, URL |
java.sql | 数据库操作 | Connection, ResultSet |
💡 注意:
java.lang
包自动导入,无需手动声明
java.lang
- 语言基础包
- 自动导入,无需显式声明
- 核心功能:基础类、数据类型、系统操作
- 常用类:
Object
:所有类的超类String
/StringBuilder
/StringBuffer
:字符串处理Integer
/Double
/Boolean
:包装类System
:系统操作(如System.out.println()
)Math
:数学运算(sqrt()
,random()
)Thread
/Runnable
:多线程支持Throwable
/Exception
/Error
:异常体系
java.util
- 实用工具包
- 最常用的工具集合
- 核心功能:集合框架、日期时间、随机数、正则表达式
- 常用类:
- 集合类:
ArrayList
/LinkedList
:动态数组HashMap
/TreeMap
:键值对存储HashSet
/TreeSet
:不重复集合
- 工具类:
Arrays
:数组操作(排序、搜索)Collections
:集合操作工具Objects
:对象操作(判空、比较)
- 时间处理:
LocalDate
/LocalDateTime
(Java 8+)Date
(旧版)/Calendar
- 其他:
Random
:随机数生成Scanner
:输入扫描Regex
:正则表达式(Pattern
,Matcher
)
java.io
- 输入输出包
核心功能:文件操作、数据流处理
常用类:
- 字节流:
InputStream
/OutputStream
FileInputStream
/FileOutputStream
- 字符流:
Reader
/Writer
FileReader
/FileWriter
- 缓冲流:
BufferedReader
/BufferedWriter
BufferedInputStream
/BufferedOutputStream
- 其他:
File
:文件/目录操作Serializable
:对象序列化接口
java.net
- 网络编程包
核心功能:网络通信、URL处理
常用类:
URL
/URI
:资源定位HttpURLConnection
:HTTP连接Socket
/ServerSocket
:TCP套接字DatagramSocket
:UDP套接字InetAddress
:IP地址处理
java.sql
- 数据库连接包
核心功能:JDBC数据库操作
常用接口:
Connection
:数据库连接Statement
/PreparedStatement
:SQL执行ResultSet
:结果集处理DriverManager
:驱动管理
java.math
- 数学计算包
核心功能:高精度数值计算
常用类:
BigInteger
:任意精度整数BigDecimal
:任意精度浮点数(金融计算必备)MathContext
:数学运算配置
六、包的依赖关系
1.依赖关系的本质
包依赖是指一个包(或类)需要调用另一个包(或类)的功能才能正常工作。在 Java 中,这种依赖通过以下方式体现:
- 编译依赖:类A使用类B时,编译A需要B的字节码
- 运行时依赖:执行时需要依赖的类必须存在于classpath
- 传递依赖:A依赖B,B依赖C → A间接依赖C
七、示例项目结构
my-project
├── src
│ ├── com
│ │ └── company
│ │ ├── model
│ │ │ └── User.java
│ │ ├── service
│ │ │ └── UserService.java
│ │ └── util
│ │ └── DateUtil.java
│ └── Main.java
└── lib
package com.company;import com.company.model.User;
import com.company.service.UserService;
import static com.company.util.DateUtil.getCurrentDate; // 静态导入public class Main {public static void main(String[] args) {User user = new User("Alice");UserService.register(user);System.out.println("注册时间: " + getCurrentDate());}
}