Java——包
一、包
1、简要介绍
在Java编程语言中,包(Package) 是一种用来组织和管理类(Class)和接口(Interface)的机制。包为开发者提供了一种逻辑分组的方式,使代码更加模块化、结构化和易于管理。
包在 Java 中叫包,实际上就是一种文件夹,也就是目录系统,实际上我们可以在 JDK 中的 src.zip 压缩包中可以找到以下资源,可以发现这些就是我们平时使用的包,比如选中的 util 包:

所以说包就是文件夹。
这样我们就对包的作用有了一个较为清晰的认知,因为我们创建文件夹的目的就是管理文件,所以在 Java 中,包就是用来管理不同类和接口的。以及处理同名文件,不同路径中的同名文件不会冲突,在 Java 中,不同包中的同名类也不冲突。与文件中的目录系统一样,Java 中的包使用的也是这种树形的结构。
2、包的定义和声明
包是Java命名空间机制的一部分,用于将相关的类、接口和子包进行分组,以避免命名冲突和提高代码的可维护性,以及控制类、接口等的访问范围。
在一个Java源文件的开头使用 package 关键字来声明它所属的包。例如:
package com.example.myapp;
3、包名与路径
包名实际上就是路径,但是中间不使用斜杠或者反斜杠分割,而是使用 . 分隔。

这里我们创建了一个包,然后我们可以到文件管理器中查看具体的路径:
![]()
可以发现包名 com.pack1 对应的就是 com\pack1,所以说包名实际上就是路径。
然后我们再在 com 中创建一个包:

可以发现这种树形结构,就是类似目录系统的。
4、包示例
上面我们创建了两个包,这样我们就可以分别在这两个包中创建一些类了,这些类即使同名也不会冲突。
然后我们分别在两个包中创建相同名字的类,如下:
package com.pack1;public class Person {String name;int age;public Person(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}//...
}
和
package com.pack2;public class Person {String name;int age;double weight;public Person(double weight, String name, int age) {this.weight = weight;this.name = name;this.age = age;}public double getWeight() {return weight;}//...
}
可以发现这两个 Person 类虽然类名相同,但是内部字段实际是不一样的。通过包,我们就可以实现这两个同名的类在不同包中管理而不冲突。
当我们要使用这两个包中的两个同名的类时,就要对这两个类更详细的标注:
public class Test {public static void main(String[] args) {com.pack1.Person person = new com.pack1.Person(18,"张三");com.pack2.Person person1 = new com.pack2.Person(60,"李四",19);}
}
这样我们才能分清对应的对象是哪个包中的类的实例。
而且我们还不能同时导入这个包中的 Person 类:
import com.pack1.Person;
import com.pack2.Person;
这样会报错。
也可以只导入一个包对应的类,这个类不用指定包名,然后另一个类的包不导入,指定包名:
import com.pack1.Person;public class Test {public static void main(String[] args) {Person person = new Person(18,"张三");com.pack2.Person person1 = new com.pack2.Person(60,"李四",19);}
}
二、包的命名规则与规范
1、命名规则
包的命名规则:
只包含数字(1-9)、字母大小写(A-Z,a-z),下划线(_),小圆点(.),不能以数字开头。也不能是关键字或保留字。
2、命名规范
一般是小写字母加小圆点构成。
结构是:
com.公司名.项目名.模块
三、常用的包
1、java.lang
这个包是自动导入的,这意味着你不需要使用 import 语句来导入这个包中的类。这是Java语言设计的一部分,旨在提供最基本的功能,所以对于这个包下的很多类:

我们在创建程序后就可以直接使用。
2、java.util
java.util 包是Java标准库中用于提供实用工具类的包,它包含集合框架、事件模型、日期和时间设施、国际化和其他实用工具类。以下是一些 java.util 包中的关键类和接口:
- 集合框架:包括
List、Set、Map、Queue等接口,以及它们的实现类如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。 - 日期和时间:包括
Date、Calendar、GregorianCalendar、TimeZone等类,以及Java 8引入的新的日期和时间API,如LocalDate、LocalTime、LocalDateTime、ZonedDateTime等。 - 随机数生成:
Random类用于生成伪随机数。 - 国际化:
Locale类用于表示特定的地理、政治或文化区域。 - 事件模型:
Observer和Observable类用于实现观察者模式。 - 工具类:如
Arrays和Collections,提供了对数组和集合进行操作的静态方法。 - 正则表达式:
Pattern和Matcher类用于处理正则表达式。
3、java.awt
java.awt(Abstract Window Toolkit)包提供了用于构建图形用户界面(GUI)的类,包括窗口、按钮、文本框等组件,以及布局管理器和图形绘制工具。以下是 java.awt 包中的一些关键类:
- 组件:如
Frame、Panel、Button、Label、TextField、TextArea等。 - 布局管理器:如
FlowLayout、BorderLayout、GridLayout、CardLayout等,用于管理组件在容器中的布局。 - 事件处理:如
ActionListener、MouseListener、KeyListener等接口,用于处理用户输入事件。 - 图形和图像:
Graphics类用于绘制图形,Image类用于处理图像。 - 颜色和字体:
Color和Font类用于设置组件的颜色和字体。
4、java.net
java.net 包提供了用于实现网络应用程序的类和接口,包括用于处理TCP/IP和UDP/IP协议的类,以及URL处理和网络通信的工具。以下是 java.net 包中的一些关键类:
- URL:
URL和URLConnection类用于处理URL和与之相关的网络资源。 - Socket编程:
Socket和ServerSocket类用于实现基于TCP的客户端和服务器端通信。 - DatagramSocket:用于实现基于UDP的数据报通信。
- InetAddress:用于表示IP地址。
- URI:
URI类用于处理统一资源标识符。
四、导入包
1、如何导入包
1)导入某个包中的某个类
一般情况下,我们要导入某个包,实际上是要使用这个包中的某个类,所以一般是导入某个包中的固定类:
例如,如果你想在代码中使用 java.util.ArrayList,你可以这样导入:
import java.util.ArrayList;
然后,你就可以在代码中直接使用 ArrayList 类,而不需要每次都写上完整的包名。
2)导入整个包
我们不仅可以导入一个包中的固定类,也可以导入整个包。如果你需要使用一个包中的多个类或接口,可以使用通配符 * 来导入整个包:
例如,导入 java.util 包中的所有类和接口:
import java.util.*;
这样,你就可以在代码中直接使用 java.util 包中的任何类或接口,如 ArrayList、HashMap、Date 等。
2、导入包示例
导入 util 包中的 Arrays 类,使用 Arrays 类中的静态方法 sort 排序数组:
import java.util.Arrays;//导入java.util包中的Arrays这个类public class Test {public static void main(String[] args) {int[] arr = {12,23,435,34,2};Arrays.sort(arr);for(int i : arr) {System.out.print(i + " ");}}
}
运行结果:

五、注意事项
-
package语句必须是源文件中的第一条非注释语句。这意味着它必须位于所有import语句之前,以及所有类或接口定义之前。 -
每个源文件只能包含一个
package语句。也就是说这个文件只能有一个路径,它的位置是唯一的。 -
import 应该在 package 和类的定义之间,没有顺序要求,可以有多句。就像下面这样:
package com.pack1;import java.util.Arrays;//导入java.util包中的Arrays这个类 import java.util.Scanner;//导入java.util包中的Scanner这个类public class Test {public static void main(String[] args) {//...} } - 如果你创建了一个源文件,放到了一个包中,但是没有使用 package 语句,那这样我们就不能在其他的源文件中使用这个类,也不能导入这个类。
六、补充
在一个源文件中使用某个包中的某个类,我们有两种方法:
1、使用 import 语句:
这是最常见的方法,通过 import 语句,你可以告诉编译器你想要使用的类来自哪个包。这样,在源文件中就可以直接使用类的名称来创建对象或调用方法,而不需要写出完整的包名。import 语句通常放在源文件的顶部,package 语句之后。
例如,如果你想使用 java.util 包中的 Arrays 类,你可以这样做:
import java.util.Arrays;//导入java.util包中的Arrays这个类public class Test {public static void main(String[] args) {int[] arr = {1, 23, 64, 33, 32};Arrays.sort(arr);//排序System.out.println(Arrays.toString(arr));//转成字符串然后打印}
}
运行结果:

2、使用完整的类名:
如果你不想使用 import 语句,或者你想使用的类与当前包中的另一个类有相同的名称,你可以使用完整的类名来引用该类。完整的类名包括包名和类名,用点(.)分隔。
例如,如果你没有导入 java.util.Arrays,你可以这样使用它:
public class Test {public static void main(String[] args) {int[] arr = {1, 23, 64, 33, 32};java.util.Arrays.sort(arr);//排序System.out.println(java.util.Arrays.toString(arr));//转成字符串然后打印}
}
运行结果:
相关文章:
Java——包
一、包 1、简要介绍 在Java编程语言中,包(Package) 是一种用来组织和管理类(Class)和接口(Interface)的机制。包为开发者提供了一种逻辑分组的方式,使代码更加模块化、结构化和易于…...
Pipeline知识小记
在scikit-learn(通常缩写为sklearn)中,Pipeline是一个非常重要的工具,它允许你将多个数据转换步骤(如特征选择、缩放等)和估计器(如分类器、回归器等)组合成一个单一的估计器对象。这…...
postman国内外竞争者及使用详解分析
一、postman简介 Postman 是一款广泛使用的 API 开发和测试工具,适用于开发人员和测试人员。它提供了一个直观的界面,用于发送 HTTP 请求、查看响应、创建和管理 API 测试用例,以及自动化 API 测试工作流程。以下是 Postman 的主要功能和特点…...
人工智能对决:ChatGLM与ChatGPT,探索发展历程
图: a robot is writing code on a horse, By 禅与计算机程序设计艺术 目录 ChatGLM:...
探索Python元类的奥秘及其应用场景
探索Python元类的奥秘及其应用场景 一、引言 在Python中,元类(Metaclasses)是一个相对高级且容易被忽视的主题。然而,对于深入理解Python的面向对象编程模型以及进行高级框架和库的设计来说,元类是一个不可或缺的工具…...
C语言基础关键字的含义和使用方法
关键字在C语言中扮演着非常重要的角色,它们定义了语言的基本构造和语法规则,通过使用关键字,开发者可以创建变量、定义数据类型、控制程序流程(如循环和条件判断)、声明函数等。由于这些字是保留的,所以编…...
【Golang - 90天从新手到大师】Day09 - string
系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,但是通常是用来包含人类可读的文本。 len()返回字符串字节数目(不是rune数)。 通过索引可以访问某个字节值,0…...
网络安全与区块链技术:信任与安全的融合
# 网络安全与区块链技术:信任与安全的融合 在网络空间,信任是一种宝贵而稀缺的资源。区块链技术以其独特的分布式账本、加密算法和共识机制,为构建网络安全提供了新的解决方案。本文将探讨网络安全与区块链技术如何融合,以增强信…...
MySQL之复制(九)
复制 复制管理和维护 确定主备是否一致 在理想情况下,备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误,备库同样可能因为MySQL自身的特性导致数据不一致,例如MySQL的Bug、网络中断、服务…...
【面试干货】 Java 中的 HashSet 底层实现
【面试干货】 Java 中的 HashSet 底层实现 1、HashSet 的底层实现2、 HashSet 的特点3、 总结 💖The Begin💖点点关注,收藏不迷路💖 HashSet 是 Java 集合框架中的一个重要成员,它提供了不存储重复元素的集合。但是&am…...
爬虫经典案例之爬取豆瓣电影Top250(方法二)
在上一篇文章的基础上,改进了代码质量,增加了多个正则表达式匹配,但同事也增加了程序执行的耗时。 from bs4 import BeautifulSoup import requests import time import re from random import randint import pandas as pdurl_list [https…...
如何优化React应用的性能?
优化React应用的性能是一个多方面的过程,涉及到代码的编写、组件的设计、资源的管理等多个层面。以下是一些常见的性能优化策略: 避免不必要的渲染: 使用React.memo、useMemo和useCallback来避免组件或其子组件不必要的重新渲染。 代码分割: 使用React.…...
css文字镂空加描边
css文字镂空加描边 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>文字镂空</title><style>/* 公用样式 */html,body{width: 100%;height: 100%;position: relative;}/* html{overflow-y: scroll;} */*{margi…...
python数据分析与可视化
Python 在数据分析和可视化方面有着广泛的应用,并且拥有众多强大的库和工具来支持这些任务。以下是一些常用的 Python 库和它们的主要用途: 数据分析 Pandas: Pandas 是 Python 中用于数据处理和分析的主要库。 它提供了数据框(DataFrame)和序列(Series)两种数据结构…...
webkit 的介绍
WebKit 是一个开源的网页浏览器引擎,它是 Safari 浏览器和许多其他应用程序的基础。WebKit 最初由苹果公司开发,并在2005年作为开源项目发布。WebKit 的核心组件包括 WebCore 和 JavaScriptCore。以下是 WebKit 的详细介绍: ### WebKit 的主…...
make与makefile
目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件,make的时候默认生…...
深度神经网络一
文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层(Input Layer)2. 隐藏层(Hidden Layers)3. 输出层(Output Layer)整体流程深度神经网络的优点深度神经…...
Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn
在探索现代 JavaScript 生态系统时,我们常常会遇到新兴技术的快速迭代和改进。其中,包管理工具的发展尤为重要,因为它们直接影响开发效率和项目性能。最近,pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…...
汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto
前言: 对于NXP的i.mx,如果基于linux开发,需要熟悉以下文档: IMX_YOCTO_PROJECT_USERS_GUIDE.pdf IMX_LINUX_USERS_GUIDE.pdf IMX_GRAPHICS_USERS_GUIDE.pdf 如果基于android开发,需要熟悉一下文档: Android_Auto_Quick_Start_Guide.pdf ANDROID_USERS_GUIDE.pdf …...
tessy 编译报错:单元测试时,普通桩函数内容相关异常场景
目录 1,失败现象 2,原因分析 1,失败现象 1,在 step 桩函数正常的情况下报错。 2,测试代码执行的数据流 和 step 桩函数内容不一致。 2,原因分析 桩函数分为 test object, test case, test step 三种类别。…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
