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