包机制
包(package)相当于文件夹对于文件的作用。用于管理类、避免类名冲突、控制访问权限
package
package 的使用有两个要点:
- 通常是类的第一句非注释性语句;
- 包名:通常使用域名域名倒序,再加上模块名,便于内部管理类;
【示例】
- 功能模块包名
com.company.util; // 工具类
com.company.dao; // 数据访问
com.company.service; // 业务逻辑
com.company.controller; // 控制器
- 个人项目包名
com.github.username;
io.github.project;
net.personal.project;
me.blog.web;
注意事项
- 写项目时都要加包,不要使用默认包
- com.gao 和 com.gao.car,这是两个完全独立的包。只是逻辑上看,后者是前者的一部分。
创建包步骤(IntelliJ IDEA创建包的方法为例)
右键创建
- 在项目目录右键
- 选择 New → Package
- 输入包名(如:com.example.project)
JDK 中的主要包
包名 | 主要功能 | 常用类 |
---|---|---|
java.lang | 核心类库(自动导入) | String, System, Math, Object, Thread |
java.util | 工具包 | List, Set, Map, Date, Scanner |
java.io | 输入输出 | File, InputStream, OutputStream, Reader |
java.net | 网络编程 | Socket, URL, InetAddress |
java.sql | 数据库操作 | Connection, Statement, ResultSet |
javax.swing | 图形界面 | JFrame, JButton, JPanel |
java.math | 数学计算 | BigInteger, BigDecimal |
java.time | 日期时间(JDK8+) | LocalDate, LocalTime, LocalDateTime |
java.awt | 抽象窗口工具包 | Frame, Button, Label |
javax.servlet | Web开发 | Servlet, HttpServlet |
注意:
java.lang包无需导入
javax开头的是扩展包
其他包需要手动导入
导入类
如果要使用其他包的类,需要使用import,从而在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。
// 导入单个类
import java.util.Date;
public class ImportExample {
public static void main(String[] args) {
// 使用导入的Date类
Date today = new Date();
System.out.println("当前时间:" + today);
// 不使用import,直接使用完整类名
java.util.ArrayList<String> list = new java.util.ArrayList<>();
list.add("示例");
}
}
// 导入包下的所有类
import java.util.*; // 不推荐使用*通配符导入,可能会导致命名冲突
注意要点
- Java 会默认导入java.lang 包下所有类,因此这些类可以直接使用
- 如果导入两个同名的类,只用用包名+类名来显示调用相关类:
java.util.Date date = new java.util.Date();
导入静态类
用于导入指定类的静态属性和静态方法,这样我们可以直接使用静态属性和静态方法
// 导入静态成员
import static java.lang.Math.PI;
import static java.lang.Math.random;
class StaticImportExample {
public void calculate() {
// 直接使用PI和random(),无需Math前缀
double area = PI * 2 * 2;
double rand = random();
}
}