【Java基础篇】一、Java package与import


共道人间惆怅事,不知今夕是何年。 – 《周秦行纪》

关卡说明

关卡描述:不知你是否还记得上一篇中的代码,前面的两行,这是在 Java 中特定的格式,想要知道它们是什么含义吗?通过本关你就能获得答案。

过关条件:理解 Javapackageimport 的作用以及如何使用它们

关卡难度:⭐️

什么是 package

现在再来回顾一下我们上一篇中的代码,首先我们创建了一个类,叫做 SimpleCalculator ,文件名叫做 SimpleCalculator.java

在最开头有这么一行:

package hello;

第一行会声明这个类所在的包名,因为这个类文件是在 hello 包下的,所以第一行的含义就是表明这个类的位置。

为什么要使用package

聪明的你也许会想到,同一个包下面应该不允许存在两个相同的文件名,也就是不允许存在相同的类名。确实如此,这也是 package 的一个很重要的作用,为类提供一个类似命名空间的管理,避免同名的类产生冲突。

试想一下,如果没有 package ,所有类都在同一个地方,那就要争先恐后的使用类名了,后来者可能就要为取名想破脑袋,就像注册游戏名时经常感慨好名字都被🐷拱了那样。

package 的另一个作用便是用来将 Java 文件进行分类管理,比如有同一种用处的类放到同一个包下,方便查找和管理。

package命名规范

虽然理论上来说,你可以随心所欲、为所欲为的命名你项目中的包,但还是建议你遵循一定的规范,因为如果大家都遵循规范来设计的话,会减少很多交流成本。

package 的命名一般分为几个部分,身份标识.开发者名/团队名/公司名.项目名.模块名,对于身份标识,主要是用来标识是个人开发还是团队开发,个人开发主要使用的标识有:indi(个体项目)、onem(单人项目)、pers(个人项目)、priv(私有项目),团队开发主要使用的标识有:team(团队项目)、com(公司项目)。

但其实没有特殊要求的话,使用域名倒写是最常见的,因为域名是不会重复的。

所以比较常见的命名类似于:com.frank.hello.controllerfrank是我的英文名,(假装)frank.com是我的域名,hello 是项目名,controller 则代表这个包都用途,表明在下面我会放控制器(先不用纠结控制器是什么)。

所以,如果还没有英文名的话,赶紧给自己找一个吧。你也许会问,如果有人用了跟自己一样的英文名怎么办?

没有关系,反正极大概率上来说,你又不会使用他的包,即使真遇上了,还是有解决办法的,改改项目名,改改包名,就ok了。

使用package的注意事项

  1. package 必须是程序中可执行的第一行代码
  2. package 语句只能有一句,且语句后面有分号
  3. package 命名要求包含的所有字符均为小写,同时不能有特殊字符
  4. package 可以有多层,每一层有.隔开,例如:package com.frank.hello;(com是一个文件夹,frankcom 下的一个文件夹,hellofrank 文件夹下的一个文件夹)
  5. 包的路径符合所开发的系统模块的定义
  6. 如果定义类的时候没有使用 package*,那么 *java 就认为我们所定义的类位于默认包里面(java.lang)。

import的作用

在之前的 SimpleCalculator 类中,我们还看到了这么一句代码:

import java.util.Scanner;

那么 import 又是做什么用的呢?

import 是在 java 文件开头的地方,先说明会用到那些类所在的全路径名,这样我们就能在代码中使用对应的类名,而不是使用全路径。

开发中需要引用到其他包下的类,比如 JDK 中一些常用的类,那么就需要先使用 import 告诉编译器我们要引用的类的位置,比如说这里的 Scanner 。那么你也许会注意到,代码中不是有 System 吗,是怎么回事呢?为什么不用引入 System 所在的包呢?

这是一个很好的问题。原因是 java.lang 这个包实在是太常用了,所以默认可以不用写,编译器会自动引入,编译器只要看到没有使用 import 引入包名的类,就会去 java.lang 中找。

那如果要引入一个包下所有类该怎么办呢?

有时候需要用到的类刚好有有多在同一个包下面,一个一个引入,显然太费事,别着急,还有更好的解决办法,可以使用*来匹配所有,比如说:

import java.util.*

那么就会引入java.util包下的所有类。

也许你会觉得,那都使用*的方式不就好了。如果这样想,那就大错特错了,包的存在就是为了减少类名冲突,这样每次都使用*将大量类引入的话,会更容易产生类名冲突,那就适得其反了。

小结

本篇讲解了 packageimport 的用途,希望通过本篇,你能知道代码中前面的那些代码有什么作用,也能在之后的代码编写中知道如何去正确使用它们。


文章作者: 清风
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 清风 !
评论
 上一篇
【Java基础篇】二、Java 程序基本结构 【Java基础篇】二、Java 程序基本结构
“No matter how small and unimportant what we are doing may seem, if we do it well, it may soon become the step that wil
2020-05-04
下一篇 
【Java基础篇】启航 【Java基础篇】启航
无论最终的结果是什么,只要这是自己选择的道路。 – 《龙与虎》 前言Java开发入门篇十分简单,相信聪明的你已经完成了新手村的任务,顺利打败了小Boss,开启这一新的篇章。​ 本篇是Java基础篇,主要内容是介绍 Java 开发中的基础
2020-05-04
  目录