时间|2022年9月13日
在之前的 Java 编程中,我们是通过「右键单击 src
文件夹,调出菜单」的方式,创建新的 Java 类。
这种方式虽然方便,但却导致 所有的类都参杂在一个文件夹 中,不利于管理和团队协作。
试想以下两个场景:
src
文件夹中创建了几十个类,现在他想要修改其中的某一个类,但是他看着项目区一整页的类,他陷入了沉思。。。src
文件夹下。Ricky 根据项目需求,编写了一个 Person
类,放在了 src
文件夹中;当 Jack 由于项目需求,也想在 src
文件夹中创建 Person
类时,却出现了报错。这种情况,就是所谓的「类命名冲突」。因此,我们急需一个方式,解决以上两个问题,这就是为什么我们需要介绍 Java 中「包」的概念。
那么,我们该如何高效有序地管理类,解决上面 2 个场景出现的问题呢?
其中最简单的方式,就是 创建多个子文件夹,让每个子文件夹下都存放特定功能的类。
比如,在 src
文件夹下创建 test
子文件夹,存放用于测试的 Test
类;在 src
文件夹下创建 tools
子文件夹,存放我们编写的工具类 Tools
等等。这样我们就可以在需要修改某一个类时,通过子文件夹的命名快速找到该类文件。
同样,我们可以创建 2 个子文件夹,一个为 ricky
,存放 Ricky 编写的 Person
类;一个为 jack
,存放 Jack 编写的 Person
类。
在 Java 中,文件夹 有 1 个专门的术语,即「包」(实际上「包」与 文件夹 略有区别,但目前不必区分)
「包」可以分为以下 2 类:
在学习如何使用 IDEA 创建包前,我们需要知道一些关于 包的命名规则和规范 的知识。
首先来看一些包的实例:
com.apple.project1.user
com.apple.project1.order
edu.mit.ricky
edu.accd.jack
com.sun.www
结合上面这些例子,我们再来看一下具体的命名规则和规范。
包的命名规则(必须遵守):
包的命名规范(建议遵守):
com.company.project.module
,即 com.公司名.项目名.模块名
下表整理了针对 不同类型的开发者 的包名命名规范:
含义 | 命名规范 | 示例 | |
---|---|---|---|
com | 公司项目,由某个公司发起,版权由该公司所有 | com.公司名.项目名.模块名 | com.huawei.mate.usr |
edu | 学校项目,由某个学校发起,版权由该学校所有 | edu.学校名.项目名.模块名 | edu.mit.admission.order |
gov | 政府项目,由某个政府发起,版权由该政府所有 | gov.政府名.项目名.模块名 | gov.zj.service.usr |
team | 团队项目,由某个团队发起,并由该团队开发的项目,版权由该团队所有 | team.团队名.项目名.模块名 | team.outlier.project.usr |
indi | 个体项目,由个人发起,但非自己独立完成,是可公开或非公开的项目,版权主要属于该发起人 | indi.发起者名.项目名.模块名 | indi.ricky.project1.test |
pers | 个人项目,由个人发起,并独立完成,是可公开的项目,版权主要属于个人 | pers.个人名.项目名.模块名 | pers.ricky.project2.usr |
priv | 私有项目,由个人发起,并独立完成,是非公开的私人项目,版权属于个人。 | priv.个人名.项目名.模块名 | priv.ricky.project3.util |
学习了包的命名规则和规范后,我们学习 如何在 IDEA 中创建包。
在 IDEA 中,创建包的方式非常简单,流程如下:
1.右键单击 src
文件夹,调出菜单,选择 New-Package
2.按照包的命名规则和规范,输入包名,按 Enter
回车键,即可完成创建
3.同样的,我们创建 edu.accd.jack
包,可以看到,此时在 2 个包中分别创建 Person
类,并不会产生报错信息,命名冲突的问题得到了解决
PS:在项目文件夹中,我们可以看到 IDEA 已经成功创建了 edu-accd-jack,edu-mit-ricky
两个子文件夹
现在,我们已经学会了如何创建包,那么我们如何在其他类中,调用某个包呢?比如,作为测试员的 Sam 想要测试 Ricky 和 Jack 写的 Person
类是否正确,他该怎么调用呢?
其实非常简单,Java 中使用 import
语句来导入包,格式为 import PackageName.ClassName
而在 IDEA 中, 强大的智能代码提示和自动导入功能,能够很轻松的帮助我们调用不同包下的类,步骤如下:
1.编写测试类,new
一个 Person
对象。可以看到,IDEA 在我们敲完 Person
后,就给出了智能提示,让我们选择不同包下的 Person 类,我们只需选择需要导入的类,按下 Enter
回车键,即可自动导入该包。
2.可以看到,按下 Enter
回车键后,IDEA 已经自动在程序中添加了 import edu.accd.jack.Person
语句
3.假如需要同时导入两个 Person 类进行测试,只需再 new
一次对象,选择第二个 Person
类
4.可以看到,这次 IDEA 并没有自动添加 import
语句,因为 Java 语法规定 不能同时存在 两个 Person 类的import
语句,而是在 new
对象时,自动添加上了相应的包名
5.运行程序,查看测试结果
在前面我们已经提到,Java 中除了用户自定义包,还有许多 内置的包,是 Java API 自带的。
比如我们经常使用的用于键盘输入的 Scanner
类,就属于 java.util
包下,需要导入后才能使用。
下表是 Java 中 常用的 一些内置包,可以帮助我们更加高效的编程:
包 | 介绍 | 导入示例 |
---|---|---|
java.lang |
Java 的 核心类库,默认导入,无需再次导入 | / |
java.util |
Java 的 实用工具类库,提供了一些实用的工具类,如 Data 、Scanner 等 |
import java.util.* |
java.io |
Java 的 标准输入/输出类库 | import java.io.* |
java.sql |
Java 的 JDBC 类库 | import java.sql.* |
java.net |
Java 的 网络类库,用于网络开发 | import java.new.* |
java.awt |
Java 的 GUI 类库,用于设计图形用户界面 | import java.awt.* |
学习 Java 的 第 22 天。⏰
今天主要整理了Java 中的「包」的相关内容,内容难度不大,但是较为繁琐。
距离上次 Java 学习笔记系列已经过去了一个多月,很抱歉拖更那么久。
这段时间博主学习了很多数学建模的相关知识,Java 的学习也因此落下了不少。
但是实际上笔记的撰写并没有停止,现在有不少有趣且干货十足的博客初稿还存留我的 Typora 中,等待润色修改后再更新至 CSDN 平台供大家阅读,也请各位朋友敬请期待。
同时,如果正在学习 线性代数,对 MIT 的经典课程 Linear Algebra 有兴趣的朋友也可以看看博主目前正在更新的 线性代数全英文学习笔记系列。「MIT线性代数笔记专栏」
笔记由 key point、active recall questions 和 answers 三部分组成,以问题为导向 回顾每节 Lecture 的重点内容,同时对上课过程中容易产生的问题做了相应的思考与解答。
适合 听完 每节 Lecture 后巩固基础解答疑惑与复习使用(不适合课前预习,但博主也在专栏中推荐了一些适合课前预习的 非常经典、优质的 GitHub 笔记仓库,供大家选择),博主亲测效果良好。
PS:对 active recall(主动回忆法)这种学习方法有疑问的朋友们,可以看看 剑桥学霸 Ali Abdaal 对这套学习方法的视频讲解,博主在学习之后受益匪浅。
【中英字幕|Ali Abdaal】高效学习法之主动回忆法 (bilibili)
【English|Ali Abdaal】 The Active Recall Framework (YouTube)
今天的博客就到此结束了,愿与诸位朋友共勉。✊
今日摘录:
「 The reading of all good books is like a conversation with the finest minds of past centuries」— René Descartes
相关博客:
【Java】学习日记 Day21
【Java】学习日记 Day20
【Java】学习日记 Day19