- 博主简介:努力学习的预备程序媛一枚~
- 博主主页: @是瑶瑶子啦
- 所属专栏: Java岛冒险记【从小白到大佬之路】
目录
- Part1:类比+理解:
- Part2:与包(package)正式见面:
- 2.1:包的本质--文件夹
- 2.2:给包命名
- 2.3:包的三大作用:
- Part3:import
- 3.1:初识import
- 3.2:import两种声明格式
- Part4:Java中常用包简介:
Part1:类比+理解:
一个例子–管理学校学生:
在一个学校中,学生根据专业、年级、班级来划分。如果一个学校的学生不分年级、班级,一起上课,这当然是不合理的。因为不易于管理。还有一点,学校中的学生难免会有重名,所以在涉及到某个具体学生的时候,一定是说明:哪个专业,哪个年级,哪个班级(eg:计科221瑶瑶子),这样才能防止不必要的误会—防止重名。
类比:
一个Java程序/项目,有若干类组成。我们该如何管理这些类,和操作这些类呢?思路和上面的管理一个学校是完全一致的。
- 一个Java程序→一个学校
- 一个Java程序包含的n个类→一个学校中的n个学生
- 包→专业.年级.班级
Part2:与包(package)正式见面:
2.1:包的本质–文件夹
由上可知道,包其实就是一份空间用来存储类文件,这个包其实就是文件夹!
详解:java这个大包包中存放了若干小包,其中util
包中(就是util文件夹中)存在各种工具类(工具类文件)。
2.2:给包命名
【命名规则】
- 只能包含
数字
,字母
,下划线
,小圆点
,不可以包含关键字
,保留字
.
eg:com.yaoyao
关于小圆点
:
- 对于一个独立的包来说,小圆点的确是它名字的一部分。原因还是一样的,有这么多包,难免有重名,比如我说;java.util这个包,就代表:java这个大包中的util这个包。所以你可以理解为:java.util是这个包的全名。(就像221是我的班级名称,但是更准确来说,计科221也是我的班级名称)
- 在IDEA创建包时(就是创建目录!!!),小圆点相当于
/
.
eg:这里演示一下:创建com.yaoyao这个包名的包
【命名规范】
com.公司名.项目名.业务模块名
2.3:包的三大作用:
- 区分相同名字的类–防止命名冲突
比如老王的家的孩子叫小虎,老李家的孩子也叫小虎,这两个孩子是相同的嘛?不是,防止冲突,我们一般会说:老王家的小虎、老李家的小虎,加上前缀:这样以表示区别
eg:com.yaoyao.Test类和com.xxx.Test是不同的类,正是由于分包管理,加上包名以示区分,避免了命名冲突。 - 方便管理
当我们一个java程序中有很多类时,我们把这些类文件分门别类,把功能相关的类/接口,放在一个包中/目录下,方便查找,使用,管理。
(其实我们使用Java API文档的原理就是这个) - 控制访问范围
用于包访问权限,才可进行访问。
关于访问权限,我们下期着重讲,这里暂不展开叙述。
Part3:import
3.1:初识import
通过part2我们知道了,通过加上包名前缀来指定某个类,可以防止命名冲突,更好的来使用类。像下面这样:
package com.yaoyao
class Demo {
java.util.Scanner scanner = new Scanner(System.in);
}
but:这样不会累嘛!?是的,为了不让我们程序员这么累,于是一个一个关键字出现了----import
有了这个关键字,上面代码可以这些写:
package com.yayao;
import java.util.Scanner;
public class Demo {
Scanner scanner = new Scanner(System.in);
}
【代码详解】:
-
package com.yaoyao
:其实就是声明当前这个类在哪个目录下(路径下),说白了,就是一个人,不可能同时在两个地方!(就是用高级语言告诉计算机,它在哪,不然计算机都不知道!)。 -
import java.util.Scanner;
:告诉计算机,接下来用到的Scanner类,是java.util包里面的。在编译的时候,会给下面的类的名称根据import来补全!(在编译的时候还是让类带上了全名,但是这就是计算机来做的了,我们程序员只要一句import就行,帮我们省力~)
3.2:import两种声明格式
- import 包名.类名
即:指定使用这个包中的这个类
import java.util.Scanner
- import 包名.*
即:告诉计算机:下面代码中的类,是在此包中的类
import java.util.*
【细节】:建议使用到哪个类,就import 包名.类名
。因为这样更具有可读性!虽然import 包名.*
并不影响运行速度(因为不像C中的include
会在把文件直接导进来),import声明只是方便编译器在编译时自动给下面类名补全,不需要我们程序员费力!
补充一些不用import 包名.*
的理由:
1.编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。
2.命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
3.说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
4.无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。
【注意】:
- 当两个类在同一个包下不需要import(因为可以直接访问)
package
声明要放在类的最上面,且一个类中只能有一条packge 语句(一个人不可能在两个地方)import
语句放在:package声明之后,类定义之前,可以有多条,没有顺序要求。
Part4:Java中常用包简介:
java.lang
:系统提供基本包,默认引入(不需要import)java.util
:系统提供工具包,其中为工具类(如Scanner类)java.net
:网络包(涉及网络开发)java.awt
:做Java界面开发(GUI)
参考文章:link
下期预告–详细讲解Java–访问修饰符
专栏系列文章:
- 【Java】还不懂this关键字?一分钟彻底弄懂this关键字
- 【JavaSE】一文看懂构造器/构造方法(Cunstructor)
- 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏
原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!