• 博主简介:努力学习的预备程序媛一枚~
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Java岛冒险记【从小白到大佬之路】

目录

  • Part1:类比+理解:
  • Part2:与包(package)正式见面:
    • 2.1:包的本质--文件夹/目录
    • 2.2:给包命名
    • 2.3:包的三大作用:
  • Part3:import
    • 3.1:初识import
    • 3.2:import导入包中的类:
      • 3.2.1:两种声明格式
    • 3.3:import实现静态导入
  • Part4:Jar包
    • 4.1:介绍
    • 4.2:如何打包?
      • 使用IDEA
  • Part5:Java中常用系统包简介:

Part1:类比+理解:

一个例子–管理学校学生:
 在一个学校中,学生根据专业、年级、班级来划分。如果一个学校的学生不分年级、班级,一起上课,这当然是不合理的。因为不易于管理。还有一点,学校中的学生难免会有重名,所以在涉及到某个具体学生的时候,一定是说明:哪个专业,哪个年级,哪个班级(eg:计科221瑶瑶子),这样才能防止不必要的误会—防止重名。
类比:
 一个Java程序/项目,有若干类组成。我们该如何管理这些类,和操作这些类呢?思路和上面的管理一个学校是完全一致的。

  • 一个Java程序→一个学校
  • 一个Java程序包含的n个类→一个学校中的n个学生
  • 包→专业.年级.班级

Part2:与包(package)正式见面:

2.1:包的本质–文件夹/目录

 由上可知道,包其实就是一份空间用来存储类文件,这个包其实就是文件夹!


详解:java这个大包包中存放了若干小包,其中util包中(就是util文件夹中)存在各种工具类(工具类文件)。

2.2:给包命名

【命名规则】

  • 只能包含数字,字母,下划线,小圆点,不可以包含关键字,保留字.
    eg:com.yaoyao
  • 包名通常会用到公司域名的颠倒形式,来保证包名的唯一性
  • 在包中类文件最上一行加上package语句,来指定该类文件在哪个包中(否则将放到一个默认包中)

关于小圆点:

  • 对于一个独立的包来说,小圆点的确是它名字的一部分。原因还是一样的,有这么多包,难免有重名,比如我说;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.yaoyaoclass 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导入包中的类:

3.2.1:两种声明格式

  • import 包名.类名
    即:指定使用这个包中的这个类
import java.util.Scanner
  • import 包名.*
    即:告诉计算机:下面代码中的类,是在此包中的类
import java.util.*

注意:import 包名.*这种方式,这种引入不能递归(嵌套),比如import java.util.*那么引入的是util包中的类,而util中嵌套的包中的类不会被引入,比如java.util.zip下的类不会被引入!试图嵌套形式引入是无效的,如:java.util.*.*

【细节】:建议使用到哪个类,就import 包名.类名。因为这样更具有可读性!虽然import 包名.*并不影响运行速度(因为不像C中的include会在把文件直接导进来),import声明只是方便编译器在编译时自动给下面类名补全,不需要我们程序员费力!

补充一些不用import 包名.*的理由:

1.编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。
2.命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
3.说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
4.无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。

【注意】:

  • 当两个类在同一个包下不需要import(因为可以直接访问)
  • package声明要放在类的最上面,且一个类中只能有一条packge 语句(一个人不可能在两个地方)
  • import语句放在:package声明之后,类定义之前,可以有多条,没有顺序要求。

3.3:import实现静态导入

使用import static可以静态导入包中静态方法和字段.

同样导入时有两种声明格式:

  • 具体导入

    • import 包名.类名.静态字段名
    • import 包名.类名.静态方法名
  • 模糊导入
    • import 包名.类名.*

【好处】:通过静态导入,我们可以直接使用类中的静态属性、静态方法。不必对属性、静态方法进行包名.类名的限制。简化代码书写

eg:

import static java.lang.Math.sqrt;
import static java.lang.Math.pow;public class Demo {public static void main(String[] args) {double x = 1;double y = 2;//非静态导入://double z = Math.sqrt(Math.pow(x) + Math.pow(y));//静态导入:double z = sqrt(pow(x) + pow(y));

Part4:Jar包

4.1:介绍

Jar包的本质就是一个压缩包(和我们所熟悉的.zip兼容)

为了我们自己写好的代码方便他人使用,以及方便使用他人写好的Java代码,很多程序语言都有打包的概念,所谓打包,就是把各种文件压缩成一个压缩包

打包一般是打包编译好了,没有问题的代码文件(在java中就是.class文件),而非源文件

可以看到,打包的好处就是方便程序直接调用这些编译好后的代码文件

4.2:如何打包?

其实就是如何将这些.class文件压缩呢?

Java中提供了专门的打包命令:jar
这里详细讲解以下运用我们的IDEA如何实现打包

使用IDEA

步骤:

  1. 点击file–>Project Structure

  2. Artifacts–>+–>Jar—>empty

  1. build–>build Artifacts

  2. 这个时候会弹出以下界面,我们直接点Build就行

  3. 这个时候可以看到侧边栏的out输出文件夹中,我们的Jar包就生成啦

Part5:Java中常用系统包简介:

  • java.lang:系统提供基础类包(如:String、Object,均在此包中,从JDK1.1之后默认自动导入。
  • java.lang.reflect:Java反射编程包
  • java.util:系统提供工具包(包含集合类),其中为工具类(如Scanner类)【重要】
  • java.net:网络包(进行网络编程开发)
  • java.awt:做Java界面开发(GUI)
  • java.sql:进行数据库开发的支持包
  • java,io:I/O编程开发包

参考文章:link
下期预告–详细讲解Java–访问修饰符
专栏系列文章:

  • 【Java】还不懂this关键字?一分钟彻底弄懂this关键字
  • 【JavaSE】一文看懂构造器/构造方法(Cunstructor)
  • 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏

原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!

【Java】到底什么是包?|最通俗易懂讲解|保姆级相关推荐

  1. JWT详细讲解(保姆级教程)

    本篇博文目录: 一.JWT 1.什么是JWT 2.JWT的结构 (1) Header (2) Payload (3) Signature (4) JWT的生成与解析 3.JWT是如何工作的 (1) J ...

  2. Mac OS下Charles抓包小程序的保姆级操作过程

    目录 前言 工具准备 Charles安装及配置 开始抓包 总结 前言 对于压力测试工作而言,小程序接口测试工作和其他接口测试工作相似,都需要为测试工作的开展去准备相应接口的信息,其中包含请求接口,入参 ...

  3. VirtualBox扩展包安装教程(保姆级一步到位)

    VirtualBox是一款功能强大的免费虚拟机软件,一般我们安装VirtualBox后要安装扩展增强包,VirtualBox扩展包包含USB2.0和USB3.0控制等支持功能,如果没有装,在使用过程中 ...

  4. 【Java经典小游戏】大鱼吃小鱼 (两万字保姆级教程)

  5. java源代码转jar包

    引入 jar文件具有跨平台.数据压缩.多文件封装的优点,所以我们常将java源程序和其他的文件(比如资源文件.签名)打包到一起,变成jar包.这样对java程序的部署会更方便,也更安全. 用IDEA等 ...

  6. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

  7. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

    目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...

  8. 吊打面试官 | Java到底是值传递还是引用传递

    HI ! 我是小小,我们又见面了,今天是本周的第六篇,这篇主要讲解关于Java到底是值传递还是引用传递. 先说答案 答案为值传递 答案解释 先说一下值传递和引用传递的概念和区别 值传递:是指在调用函数 ...

  9. 写一个java的网络数据包分析程序(一)

    需要写一个工具监控我所负责项目中的服务器与客户端的交易事件,而我又不方便修改系统代码(因为此工具只是我自己为了工作方便而作),因此需要通过监听并分析网络数据包来获取信息. 原本打算将tcpdump的C ...

最新文章

  1. 沉浸式5G实景、AI+AR体验、机器人互动|5G+数智化展馆广州开幕
  2. python【数据结构与算法】并查集引入
  3. RxJava响应式编程学习笔记
  4. javascript获取url参数的代码
  5. 微信小程序项目实战知识点总结(swiper组件自适应高度,自定义弹出层,悬浮按钮,虚拟键盘)...
  6. math.atan_Python中带有示例的math.atan()方法
  7. matplotlib设置画布大小_PyTorch 49.matplotlib模块
  8. python以读写方式打开文件_python 文件读写with open模式r,r+,w,w+,a,a+的区别
  9. c语言求浮点数矩阵的逆程序,逆矩阵求程序!!!谢谢
  10. java实现文件的复制
  11. 北京的旅游攻略(持续更新中)
  12. Istio进入1.7版本,Service Mesh 落地还有什么障碍?
  13. unity3D游戏开发一之初识unity
  14. 怎么设置html表格的最小宽度,HTML表格的宽度怎么设置
  15. Win7系统彻底删除打印机驱动
  16. 抖音最常见的4种违规方式,不注意很可能会被封号!
  17. 70条正则表达式的整理汇总
  18. 高速ad指标分析 matlab,高速ADC的动态性能参数和基于DSP技术的测试方法研究
  19. 通过宏代码自动解除excel工作表格保护
  20. 软件项目管理==风险计划

热门文章

  1. 如何使用CMD命令进入带有空格的文件夹
  2. 关于Mybatis拦截器的使用
  3. JUC系列之并发队列
  4. nginx降权运行和php环境部署
  5. linux string和wstring的转化
  6. ENGLISH资料收集(12)-古代经典著作书名
  7. OCCT教程一:安装步骤
  8. 列控安全计算机,一种高铁列控安全计算机的架构以及主备切换方法专利_专利查询 - 天眼查...
  9. 西京学院计算机可以考研吗,西京学院考研难吗
  10. 手机广告酝酿井喷 3G时代解决终端带宽瓶颈