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 三种类别。…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...