1. 概述
1.1 为什么需要包这个概念
package可以简单理解为创建文件夹,windows中不能存储同类型同名称的文件,java也是。
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
1.2 包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
2. 包的使用
2.1 创建包
- 包申明必须在源文件的第一行,每个源文件只能有一个包申明,这个文件中的每个类型都应用于它
- 如果一个源文件中没有包申明,那么其中的类、函数、枚举、注释等将被放在一个无名的包(unnamed package)中
包语句的语法格式为:
package pkg1 [.pkg2[. pkg3...]];
2.2 package目录结构
示例:一个Test.java里面的内容:
package net.java.util;
public class Test{
...
}
其在文件夹中的存储路径为net/java/util/Test.java,同时生成的class文件在net/java/util目录下。
类放在包中会有两种主要结果:
- 包名成为类名的一部分
- 包名必须与相应的字节码所在的目录结构相吻合
还是上面的示例,正确的类名是:net.java.util.Test.
2.3 使用import导入包
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);
导入其实和直接写在java文件中是一样的,编译器最后都会把他们写在一起。就像C中的define一样,编译的时候会展开。
3. 常见的系统包
在java中,除了我们自定义包外,java本身还提供了许多常用的系统包,如下表所示:
包名 | 作用 |
Java.lang | Language的缩写,包含了基本数据类型以及包装类,String类,线程类等,该包由系统默认加载(import). |
Java.lang,reflect | 反射对象包, 该包里提供关于类和对象反射信息的工具,在后续章节学习 |
Java.util | 工具包,提供日期Date类、堆栈Stack类、向量Vector类,链表LinkList类, 随机数Random类等 |
Java.util.regex | 正则工具包,用来匹配字符串 |
Java.text | 处理文本包,用来格式化日期、数字和消息,分析,搜索和排序字符串,以及迭代字符、单词、语句和换行符等 |
Java.io | 数据流包,处理文件读写、标准设备输出等 |
Java.net | 网络编程包,里面包含了Socket 类(TCP客户端,用于连接远程主机) ServerSocket类(TCP服务端,用来接受客户端套接字的连接) DatagramSocket类(UDP 端点,用于发送和接收数据包) MulticastSocket 类(是 DatagramSocket 的子类,用来处理广播) |
Java.sql | 数据库操作包,提供了与各种数据库操作的工具 |
4. 导入类的三种方式
- 通过import导入完整的类路径
import com.baidu.Test.Bus; //import后面是有分号的
- 通过import导入包路径
比喻要使用某个包的所有类,可以用通配符*, impor com.baidu.Test.*;
- 通过完整路径的方式使用类
参考链接:
https://baijiahao.baidu.com/s?id=1610064438454407570&wfr=spider&for=pc
https://www.runoob.com/java/java-package.html