课时100:包的定义

简介: 课时100介绍了Java中包的概念与作用,以及包的定义和使用方法。包用于组织和管理类文件,避免类名冲突,提升代码可维护性和协作效率。通过`package`关键字声明包,采用反向域名命名确保唯一性。编译时使用`javac -d`命令自动生成目录结构,简化开发流程。运行程序时需带上包名,格式为“包.类”。

课时100:包的定义

摘要:

1. 包的概念与作用

2. 包的定义与使用

 

01. 包的概念与作用

 

在 Java 编程中,包(Package)是一个重要的概念。包的主要作用是对类进行组织和管理。在实际项目开发中,所有的类都必须放在包中。对于大型项目而言,通常需要多位开发者共同完成,因此不可避免地会遇到类名冲突的问题。


例子:类名冲突

假设我们有一台服务器,服务器上有两位开发者:王建和李旭。王建花了三天三夜编写了一个 Java 程序,功能是输出 Harvard,他将程序编译后生成了 A.class 文件并上传到服务器根目录。随后,李旭花了 10 秒钟编写了一个程序,功能是输出 我比你胖,他也将程序编译为 A.class 并上传到同一目录。由于服务器不允许同名文件共存,李旭的文件覆盖了王建的文件。


当王建运行程序时,发现输出变成了 我比你胖,于是他重新上传了自己的 A.class,但李旭也再次上传了他的文件,导致两人的程序不断互相覆盖,最终服务器上的 A.class 文件内容不稳定,产生了严重冲突。这种冲突的根本原因是缺乏有效的文件管理机制。如果两位开发者使用包来管理文件,例如王建将程序放在 com.wangjian 包中。


路径为 com/wangjian/A.class,而李旭将程序放在 com.lixu 包中,路径为 com/lixu/A.class,即使文件名相同,由于位于不同目录,也不会互相覆盖,从而避免冲突。通过使用包,可以有效组织和管理文件,避免命名冲突,提高代码的可维护性和协作开发的效率。

image.png

在操作系统中,同一个目录下不允许存在相同的程序类文件。然而,在实际开发中,很难保证类名不会重复。为了解决这一问题,可以将程序类文件存放在不同的目录下,不同的目录中可以存放相同名称的文件。这个目录在 Java 中被称为包。包的本质就是一个目录。


02. 包的定义与使用

2.1 包的定义

范例1:定义包

新建文件夹

image.png

新建Java文件,命名为 Hello.java

image.png

代码如下:

package cn.mldn.demo; //定义包,其中“.“ 表示分割子目录(子包)
public class Main {
    public static void main(String[] args) {
   System.out.println("Hello World!");
    }
}

总结:在Java中,包的定义是通过Package关键字来实现的。每个Java文件的开头都必须声明其所属的包。包的命名通常采用反向域名的形式,以确保唯一性。例如, cn.mldn.demo 表示一个包路径,其中 cn.mldn 是域名,Demo 是项目或模块的名称。

2.2 打包编译

在 Java 程序开发中,如果程序中使用了包,程序编译后的结果就必须将 “*.class” 文件保存在指定的目录中。手动创建这些目录结构可能会非常繁琐。最好的做法是使用 javac 命令的-d选项来自动生成目录结构。进行打包编译处理 : javac -d.Hello.java

(1“-d”:表示要生成目录,而目录的结构就是package定义的结构;

(2)“.”:表示在当前所在的目录中生成程序类文件;

image.png

 

在程序执行时,必须带上包名执行程序类,代码为:java cn.mldn.deno.Hello,从此以后,完整的类名称是“包.类”名称。

运行结果如下:

image.png

 

在Java开发中,包是一个非常重要的概念。通过包,我们可以有效地组织和管理类文件,避免类名冲突,并提高代码的可维护性。每个   Java 类都必须放在包中,并且 Package声明必须放在类的首行。通过javac -d命令,我们可以自动生成包的目录结构,简化开发流程。

相关文章
|
存储 内存技术
USB的VID,PID
USB的VID,PID
880 0
|
机器学习/深度学习 人工智能 算法
【AI系统】AI 框架基础介绍
本文介绍了AI算法、神经网络及AI框架的基础概念,探讨了神经网络的作用、训练目的以及AI框架如何简化模型设计、训练与验证过程。文章还概述了AI框架的发展历程和技术演进,强调了国内外主要AI框架的特点及其对AI技术发展的推动作用。
630 2
【AI系统】AI 框架基础介绍
|
前端开发 UED 索引
React 图片灯箱组件 Image Lightbox
图片灯箱组件是一种常见的Web交互模式,用户点击缩略图后弹出全屏窗口展示大图,并提供导航功能。本文介绍了基于React框架的图片灯箱组件开发,涵盖初始化状态管理、图片加载与预加载、键盘和鼠标事件处理等常见问题及解决方案。通过`useState`和`useEffect`钩子管理状态,使用懒加载和预加载优化性能,确保流畅的用户体验。代码案例展示了组件的基本功能实现,包括打开/关闭灯箱、切换图片及键盘操作。
607 80
ThreeJs控制模型的隐藏与显示
这篇文章讲解了如何在Three.js中通过代码控制3D模型的显示与隐藏状态。
382 3
ThreeJs控制模型的隐藏与显示
|
存储 API C语言
C/C++爱心代码
C/C++爱心代码
4258 2
|
设计模式 测试技术 C#
WPF/C#:在WPF中如何实现依赖注入
WPF/C#:在WPF中如何实现依赖注入
815 0
|
供应链 物联网 分布式数据库
使用Python实现简单的区块链
使用Python实现简单的区块链
452 8
|
负载均衡 前端开发 应用服务中间件
使用Nginx配置SSL以及部署前端项目
本文介绍了如何使用Nginx配置SSL证书以启用HTTPS,并展示了如何通过Nginx部署前端项目,包括配置SSL证书、设置代理和负载均衡的示例。
663 2
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
运维 监控 负载均衡
使用Java构建高可用系统的最佳实践
使用Java构建高可用系统的最佳实践