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));//转成字符串然后打印
	}
}

运行结果:

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s部署wordpress及性能优化

镜像版本:wordpress mysql版本:mysql:8.0.27 部署wordpress:v1 此版本包含wordpress基础服务,可访问,但是一旦pod重新创建会丢失数据,文章中的图片等也会丢失,且只又一个pod,性能…

基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络(CNN) 4.2 CNN-GRU模型架构 4.3 CNN-GRU结合PSO的时间序列预测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软…

20240622 每日AI必读资讯

🤖力压GPT-4o!新王Claude 3.5 Sonnet来了,直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型,同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…

牛客练习题打卡--redis

A list保证数据线性有序且元素可重复,它支持lpush、blpush、rpop、brpop等操作,可以当作简单的消息队列使用,一个list最多可以存储2^32-1个元素; redis中set是无序且不重复的; zset可以按照分数进行排序 ,是有序不重复的; Redi…

5步快速了解电商渠道数字化管理||电商API数据采集|数据分析

随着电商平台的飞速发展,电商渠道占据品牌经销渠道的比重越来越大,以前只有线下经销渠道的时代已经结束,但是随着渠道的拓展,其中出现了很多问题,如线上渠道或者店铺数量更大、扰乱秩序成本更低、日常上线和下线变动价…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致,例如,如果用于接收CMOS图像传感器的图像数据,则接收端程序的串化因子、通道个…

ardupilot开发 --- Jetson Orin Nano 后篇

我拼命加速,但贫穷始终快我一步 0~1920. visp-d455:基于IBVS的Pixhawk无人机视觉伺服20.1 基础关于连接、通讯、UDP forward服务:一些相关的、有用的例程Linux C程序的gdb断点调试搭建仿真解决【testPixhawkDroneTakeoff.cpp例程能解锁但起飞…

unity-调用讯飞星火语音唤醒-新版windowsSDK

调用讯飞星火语音唤醒-新版windowsSDK 先贴一张在unity中 wins系统下成功调用新版的讯飞windowsSDK的运行截图 为什么要用讯飞的语音唤醒? 项目中需要在unity和win系统下进行语音唤醒开启语音对话,而语音唤醒比较成熟的方案大多都是在linux系统下的&…

vue实现的商品列表网页

一、商品列表效果如下 二、代码&#xff1b; vue实现的商品列表网页 &#xff0c; 图片在vue项目的Public文件夹里的 imgs中 <template><div class"common-layout"><!-- el-container:外层容器。 当子元素中包含 <el-header> 或 <el-foo…

【性能优化】表分桶实践最佳案例

分桶背景 随着企业的数据不断增长&#xff0c;数据的分布和访问模式变得越来越复杂。我们前面介绍了如何通过对表进行分区来提高查询效率&#xff0c;但对于某些特定的查询模式&#xff0c;特别是需要频繁地进行数据联接查或取样的场景&#xff0c;仍然可能面临性能瓶颈。此外…

Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试

目录 1. 简介 2. 实例测试 2.1 实例介绍 2.1 创建工程 3 常见错误 3.1 核心共享库报错 4. 总结 1. 简介 在《Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南-CSDN博客》一文中&#xff0c;我详尽地介绍了 OpenCV 的安装过程。尽管 Vitis Vision 库的实现本身并…

泽众云真机-平台即将升级支持华为机型HarmonyOS NEXT系统

具小编了解&#xff0c;泽众云真机即将升级支持华为机型HarmonyOS NEXT系统。有些人可能对HarmonyOS NEXT系统了解不多。 之前我们有个银行项目&#xff0c;客户要求测试华为HarmonyOS NEXT系统环境&#xff0c;当时我们云真机尚未有该系统的机型&#xff0c;然后技术人员向华为…

企业智慧办公管理平台

摘要 在之前的疫情中&#xff0c;大多数企业都受到了较大的冲击&#xff0c;然而一些公司却因为工作的特殊性可以居家远程办公&#xff0c;不过这些企业在管理员工的过程中却遇到了较大的困难&#xff0c;这是因为这些企业的管理系统根本大多都无法管理员工的工作项目&#xf…

【面试干货】 Java 中的 HashSet 底层实现

【面试干货】 Java 中的 HashSet 底层实现 1、HashSet 的底层实现2、 HashSet 的特点3、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; HashSet 是 Java 集合框架中的一个重要成员&#xff0c;它提供了不存储重复元素的集合。但是&am…

【AI作曲】毁掉音乐?早该来了!一个网易音乐人对于 AI 大模型音乐创作的思辨

引言&#xff1a;AI在创造还是毁掉音乐&#xff1f; 正如当初 midjourney 和 StableDiffusion 在绘画圈掀起的风波一样&#xff0c;suno 和 各大音乐大模型的来临&#xff0c;其实早该来了。 AI 在毁掉绘画&#xff1f;或者毁掉音乐&#xff1f; 没错&#xff0c;但也错了。…

SuperImage高级免费版本下载,简单纯粹没有广告!

SuperImage是一款功能强大、易于使用的基于神经网络的图像放大工具&#xff0c;适用于各种场景&#xff0c;如修复老照片、增大图片尺寸、智能修复破损等。基于AI技术&#xff0c;使用MNN深度学习框架和Real-ESRGAN算法&#xff0c;能够提供高质量的图像处理效果。通过设备的GP…

嵌入式Linux驱动开研发流程详细解析

大家好,今天主要给大家分享一下,嵌入式linux中重要的内容详解。 一、驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询、中断处理、DMA通信(CPU与外设通信的方式) 进行物理内存向虚拟内存…

综合评价 | 基于因子分析和聚类分析的节点重要度综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于因子分析和聚类分析的节点重要度综合评价&#xff08;Matlab&#xff09; 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复基于因子分析和聚类分析的节点重要度综合评价&#xff08;Matlab…

Apache Arrow 和数据的未来:开放标准推动人工智能发展

Apache Arrow 是一种开源列式内存格式&#xff0c;适用于平面数据和分层数据。在现代数据湖中&#xff0c;开放数据格式&#xff08;如 Apache Arrow&#xff09;位于现代对象存储的存储层中。这些格式成为对象存储中的对象。 在最新版本中&#xff0c;Apache Arrow 宣布计划从…

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法

碳钢酸洗线送酸槽蒸汽冷凝水PH计测量装置改进方法 一、项目提出前状况 1)立项背景 轧钢退火酸洗生产线的酸洗过程需要使用大量的硫酸、盐酸、硝酸、氢氟酸等酸液对钢带的表面进行清洗,酸洗过后产生较多的酸洗废水,酸洗废水需要经过处理达到污水排放标准后才能排放。其中酸…