当前位置: 首页 > news >正文

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 包中的关键类和接口:

  • 集合框架:包括 ListSetMapQueue 等接口,以及它们的实现类如 ArrayListLinkedListHashSetTreeSetHashMapTreeMap 等。
  • 日期和时间:包括 DateCalendarGregorianCalendarTimeZone 等类,以及Java 8引入的新的日期和时间API,如 LocalDateLocalTimeLocalDateTimeZonedDateTime 等。
  • 随机数生成Random 类用于生成伪随机数。
  • 国际化Locale 类用于表示特定的地理、政治或文化区域。
  • 事件模型Observer 和 Observable 类用于实现观察者模式。
  • 工具类:如 Arrays 和 Collections,提供了对数组和集合进行操作的静态方法。
  • 正则表达式Pattern 和 Matcher 类用于处理正则表达式。

3、java.awt

java.awt(Abstract Window Toolkit)包提供了用于构建图形用户界面(GUI)的类,包括窗口、按钮、文本框等组件,以及布局管理器和图形绘制工具。以下是 java.awt 包中的一些关键类:

  • 组件:如 FramePanelButtonLabelTextFieldTextArea 等。
  • 布局管理器:如 FlowLayoutBorderLayoutGridLayoutCardLayout 等,用于管理组件在容器中的布局。
  • 事件处理:如 ActionListenerMouseListenerKeyListener 等接口,用于处理用户输入事件。
  • 图形和图像Graphics 类用于绘制图形,Image 类用于处理图像。
  • 颜色和字体Color 和 Font 类用于设置组件的颜色和字体。

4、java.net

java.net 包提供了用于实现网络应用程序的类和接口,包括用于处理TCP/IP和UDP/IP协议的类,以及URL处理和网络通信的工具。以下是 java.net 包中的一些关键类:

  • URLURL 和 URLConnection 类用于处理URL和与之相关的网络资源。
  • Socket编程Socket 和 ServerSocket 类用于实现基于TCP的客户端和服务器端通信。
  • DatagramSocket:用于实现基于UDP的数据报通信。
  • InetAddress:用于表示IP地址。
  • URIURI 类用于处理统一资源标识符。​​​​​​​​​​​​​​

四、导入包

1、如何导入包

1)导入某个包中的某个类

一般情况下,我们要导入某个包,实际上是要使用这个包中的某个类,所以一般是导入某个包中的固定类:

例如,如果你想在代码中使用 java.util.ArrayList,你可以这样导入:

import java.util.ArrayList;

然后,你就可以在代码中直接使用 ArrayList 类,而不需要每次都写上完整的包名。

2)导入整个包

我们不仅可以导入一个包中的固定类,也可以导入整个包。如果你需要使用一个包中的多个类或接口,可以使用通配符 * 来导入整个包:

例如,导入 java.util 包中的所有类和接口:

import java.util.*;

这样,你就可以在代码中直接使用 java.util 包中的任何类或接口,如 ArrayListHashMapDate 等。

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 + " ");}}
}

运行结果:

五、注意事项

  1. package 语句必须是源文件中的第一条非注释语句。这意味着它必须位于所有 import 语句之前,以及所有类或接口定义之前。

  2. 每个源文件只能包含一个 package 语句。也就是说这个文件只能有一个路径,它的位置是唯一的。

  3. 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) {//...}
    }
  4. 如果你创建了一个源文件,放到了一个包中,但是没有使用 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 是一个开源的网页浏览器引擎&#xff0c;它是 Safari 浏览器和许多其他应用程序的基础。WebKit 最初由苹果公司开发&#xff0c;并在2005年作为开源项目发布。WebKit 的核心组件包括 WebCore 和 JavaScriptCore。以下是 WebKit 的详细介绍&#xff1a; ### WebKit 的主…...

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件&#xff0c;make的时候默认生…...

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层&#xff08;Input Layer&#xff09;2. 隐藏层&#xff08;Hidden Layers&#xff09;3. 输出层&#xff08;Output Layer&#xff09;整体流程深度神经网络的优点深度神经…...

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;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&#xff0c;失败现象 2&#xff0c;原因分析 1&#xff0c;失败现象 1&#xff0c;在 step 桩函数正常的情况下报错。 2&#xff0c;测试代码执行的数据流 和 step 桩函数内容不一致。 2&#xff0c;原因分析 桩函数分为 test object, test case, test step 三种类别。…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...