【Java】学习日记 Day22

【Java】学习日记 Day22_第1张图片
作者|Rickyの水果摊

时间|2022年9月13日


今日知识点总结

1. 为什么需要「包」(Package)?

在之前的 Java 编程中,我们是通过「右键单击 src 文件夹,调出菜单」的方式,创建新的 Java 类。

这种方式虽然方便,但却导致 所有的类都参杂在一个文件夹 中,不利于管理和团队协作。

试想以下两个场景:

  1. Ricky 在 src 文件夹中创建了几十个类,现在他想要修改其中的某一个类,但是他看着项目区一整页的类,他陷入了沉思。。。
  2. Ricky 和 Jack 合作开发一个项目,他们的类文件都存放在 同一个src 文件夹下。Ricky 根据项目需求,编写了一个 Person 类,放在了 src 文件夹中;当 Jack 由于项目需求,也想在 src 文件夹中创建 Person 类时,却出现了报错。这种情况,就是所谓的「类命名冲突」。

【Java】学习日记 Day22_第2张图片

因此,我们急需一个方式,解决以上两个问题,这就是为什么我们需要介绍 Java 中「包」的概念。


2. 什么是「包」?

那么,我们该如何高效有序地管理类,解决上面 2 个场景出现的问题呢?

其中最简单的方式,就是 创建多个子文件夹,让每个子文件夹下都存放特定功能的类。

比如,在 src 文件夹下创建 test 子文件夹,存放用于测试的 Test 类;在 src 文件夹下创建 tools 子文件夹,存放我们编写的工具类 Tools 等等。这样我们就可以在需要修改某一个类时,通过子文件夹的命名快速找到该类文件。

同样,我们可以创建 2 个子文件夹,一个为 ricky ,存放 Ricky 编写的 Person 类;一个为 jack,存放 Jack 编写的 Person 类。

【Java】学习日记 Day22_第3张图片

在 Java 中,文件夹 有 1 个专门的术语,即「」(实际上「包」与 文件夹 略有区别,但目前不必区分)

「包」可以分为以下 2 类:

  1. Java 内置包(Build - in Packages,Java API 自带)
  2. Java 用户自定义包(User - defined Packages,由用户自己定义的包)

3.「包」的命名规则和规范

在学习如何使用 IDEA 创建包前,我们需要知道一些关于 包的命名规则和规范 的知识。

首先来看一些包的实例:

  1. com.apple.project1.user
  2. com.apple.project1.order
  3. edu.mit.ricky
  4. edu.accd.jack
  5. com.sun.www

结合上面这些例子,我们再来看一下具体的命名规则和规范。


包的命名规则(必须遵守):

  1. 包的名称由字母、数字、下划线、点号组成
  2. 数字不能作为包名称的开头(如:com.1s / 1s.com 等都是错误的包名)
  3. 包名不能包含 Java 关键字与保留字(如:com.class 等都是错误的包名。附:Java 中的关键字与保留字)

包的命名规范(建议遵守):

  1. 包名中的 字母 均采用 小写形式
  2. 包名一般采用 域名的倒写形式
  3. 对于公司来说,包的命名格式一般为: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

4. 在 IDEA 中创建「包」

学习了包的命名规则和规范后,我们学习 如何在 IDEA 中创建包

在 IDEA 中,创建包的方式非常简单,流程如下:

1.右键单击 src 文件夹,调出菜单,选择 New-Package

【Java】学习日记 Day22_第4张图片

2.按照包的命名规则和规范,输入包名,按 Enter 回车键,即可完成创建

【Java】学习日记 Day22_第5张图片

3.同样的,我们创建 edu.accd.jack 包,可以看到,此时在 2 个包中分别创建 Person 类,并不会产生报错信息,命名冲突的问题得到了解决

【Java】学习日记 Day22_第6张图片

PS:在项目文件夹中,我们可以看到 IDEA 已经成功创建了 edu-accd-jack,edu-mit-ricky 两个子文件夹

【Java】学习日记 Day22_第7张图片


5. 在其他类中调用「包」

现在,我们已经学会了如何创建包,那么我们如何在其他类中,调用某个包呢?比如,作为测试员的 Sam 想要测试 Ricky 和 Jack 写的 Person 类是否正确,他该怎么调用呢?

其实非常简单,Java 中使用 import 语句来导入包,格式为 import PackageName.ClassName

而在 IDEA 中, 强大的智能代码提示和自动导入功能,能够很轻松的帮助我们调用不同包下的类,步骤如下:

1.编写测试类,new 一个 Person 对象。可以看到,IDEA 在我们敲完 Person 后,就给出了智能提示,让我们选择不同包下的 Person 类,我们只需选择需要导入的类,按下 Enter 回车键,即可自动导入该包。

【Java】学习日记 Day22_第8张图片

2.可以看到,按下 Enter 回车键后,IDEA 已经自动在程序中添加了 import edu.accd.jack.Person 语句

【Java】学习日记 Day22_第9张图片

3.假如需要同时导入两个 Person 类进行测试,只需再 new 一次对象,选择第二个 Person

【Java】学习日记 Day22_第10张图片

4.可以看到,这次 IDEA 并没有自动添加 import 语句,因为 Java 语法规定 不能同时存在 两个 Person 类的import 语句,而是在 new 对象时,自动添加上了相应的包名

【Java】学习日记 Day22_第11张图片

5.运行程序,查看测试结果

【Java】学习日记 Day22_第12张图片


6. Java 中的内置包

在前面我们已经提到,Java 中除了用户自定义包,还有许多 内置的包,是 Java API 自带的。

比如我们经常使用的用于键盘输入的 Scanner 类,就属于 java.util 包下,需要导入后才能使用。

【Java】学习日记 Day22_第13张图片

下表是 Java 中 常用的 一些内置包,可以帮助我们更加高效的编程:

介绍 导入示例
java.lang Java 的 核心类库默认导入,无需再次导入 /
java.util Java 的 实用工具类库,提供了一些实用的工具类,如 DataScanner 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 pointactive recall questionsanswers 三部分组成,以问题为导向 回顾每节 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

你可能感兴趣的:(Java,java,学习,笔记)