• 包 package


    前言:

    上文我们 讲 完 了 封装 , 本文 主要 对 封装的 扩展 包 ,及包访问权限.

    包 (package)

    包的 概念:

    在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。比如:为了更好的管理电

    脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。

    如 : 我们 就可以 将 我们 的 歌曲 进行 分类 ,这样就 容易 管理 。

    在这里插入图片描述

    在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:

    一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要

    处在不同的包中即可


    简单来说 :

    包 (package) 是组织类的一种方式.使用包的主要目的是保证类的唯一性

    小了解 了 一下我们包 的 概念 ,其实 我们 很早 就 在使用 了 包 ,回忆 一下我们 是 如何 打印 数组 ,

    在这里插入图片描述

    这里我们 是不是 就通过 Arrays 这个类中 的 toString 方法 来 打印我们的 数组 , 这里我们 就 通过 util 这个 包

    ,使用了 包中 的 类 ,然后 通过 这个类中 的方法 完成了我们 打印 数组的 指令。

    之前我们 都是 直接 使用 没有 特别深究 过 ,这里我们 就来 浅 谈 一下 。

    看到我们 最前 面 是不是 有 一句 代码 ,我们 就来 分析 一下 。

    在这里插入图片描述

    import (导入)


    最开始 我们 看到 了 一个 单词 import

    在这里插入图片描述


    通过我们 的 有道 ,我们 可以 看到 在 计算机 中 这个单词的 意思 就算 导入,导入导入 到底 导入的 是 什么 呢??

    其实 import 是 用来 帮助我们导入 包 的 , 通过 import 导入 别人 写好的 包 (包里存的基本上都是类,而这

    些类都是别人写好的),这里我们 就能够 使用别人写好的 类 。

    下面 继续 我们 能看到 java.util这里 又是 啥 意思 呢 ?

    其实 这里 就是 我们的 包 ,util 就是 java 为 我们 提供 的 工具 包 。


    在 这包 中 :

    Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及

    时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及

    哈希表(Hashtable)等类来表示相应的数据结构。 (了解 即可 )。


    最后 的 Arrays 就是 我们 使用 的 类 ,直接 直接 使用 .点好 ,点出 我们 使用 方法 存在 的 类 。

    了解 了 包 (package) 下面我们 就 通过 导入 一个 包 来 获取 我们的 毫秒级别的时间戳


    在这里插入图片描述

    这里我们 就 通过 导入 tuil 这个包 , 通过 Date 这个 类 ,使用了 我们的 getTime() 方法 获取 了 时间 搓 ,

    另外 :我们也可以 不用导入 包 中的 类 ,而 直接 使用 。

    可以 发现 这里 注释掉 包 ,这里 就化红线报错 了 , 你们 肯定 会说 这不骗人的 吗 ?

    在这里插入图片描述


    那么我们 就来 看看 如何 不通过 导 包中 的 类 而使用 。

    在这里插入图片描述


    这样 也 能够 使用 getTime()方法 但 这样使用 比较麻烦,我们 还是 习惯 使用 import 这种 方法。

    下面来 看一下包的 注意事项:

    不能, 只导入包 ,不指定 具体的 类


    在这里插入图片描述

    可以看 我们 只通过 import 导入 了 我们的 工具包 util 但没有 指定我们的 Arrays 类 , 这里 就报错了 。

    这里就可以 得出 一个 结论 :

    在 Java中 只能导入 一个具体 的类 不能导入 一个 具体的包

    另外 :我们 还可以 通过 另外 一种 方法 来 导入我们的包中 的 类 。

    import java.util . *;

    这里 的 意思 就是 将 util 这个包中 的 所有类 导入,*表示的是通配符,包括 util 的所有类

    补充: 这里 并不是 全部 导入 ,此时肯定 有人 会 晕掉 ,不要急 慢慢来看 ,

    这里我们的 java 在 处理的时候,需要哪个类,它才会给你那个类。


    就是说:Java不会提前给你任何类,当你需要某个类的时候,再给你。而且是要一个,给一个。 不会说要一个,给你一大堆。

    相比 与 C 语言 中的#include java 就 做的很好 , C 只要导入 了 这个头文件 ,就会 将 stdio.h 的 东西 全部 导入 , 相比 java 就 只会 导入 我们 需要的类。

    下面 就来 演示 一下 :

    在这里插入图片描述

    这 里 就 成功 将我们的 数组 给打印出来了。

    但并不是 所有东西的 是 十全十美的 , 这里我们 使用 import java.util.* 也是 有 缺陷 的 。


    这里 就来 看一下: 这里 还是 拿 获取 毫秒级的时间搓来举例 (Date)

    在这里插入图片描述

    可以看到 在 util 和 sql 这 两个 包 地下 都 有 Date 这个 类 ,如果 我们 同时 使用 * 来 导入 具体的 类 就会 出现问题 。

    在这里插入图片描述


    这样 就会 出现 冲突 ,导致 Date 不晓得 是 那个 包中 的 , 这里 就需要 手动 导入 一个 具体 的 类 ,或 手动 指定 路径 。

    在这里插入图片描述

    这里 换成 java.sql 也行 ,

    另外 一种 方法 :

    在这里插入图片描述

    这里 我们 来 对比 一下 : import java.util.具体类 import java.*那种 方法 好 ,这里我们认为 import java.util.具体的类 相对 好一点 ,也 比较 推荐使用这种 方法。

    下面我们 来 学习 一下 import static-静态导入

    import static - 静态导入 (了解即可)

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


    具体 操作 :
    import static java.lang.具体的类.*;

    下面 就来 演示 一下: 求 两个 数 的 最大值 .

    在这里插入图片描述

    一般我们 是不是 就这样 求 最大值 的 , 下面我们 就 通过 import static 来静态 导入 .

    在这里插入图片描述

    这样我们 就 不用 写 Math. 只写 了 方法 max () 就 将我们的 最大值 求出来了.

    但我们一般 不推荐 这么 写 , 这里 虽然 简化 了我们的 代码 ,但 可读性 变差了 .

    下面我们就来 创建我们的 包

    创建包

    操作步骤 : 在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包

    在这里插入图片描述

    弹出的对话框中输入包名, 例如 com.baidu.demo

    在这里插入图片描述

    在这里插入图片描述


    这里我们就 创建 出 了我们的 包 ,如果 你 的 包也 和我 一样 是 连在 一起 ,那么 就 跟这 设置 一下 .

    在这里插入图片描述


    这样我们 就 设置 好 了.

    在这里插入图片描述

    下面我们 再 我们 创建的 包 中 创建 类


    这里 我们 就成功的 创建 出类 了 , 但 上面的 package com.baidu.demo1 是 什么 呢 ?

    其实 这里 是 我们的 这个 包的 路径.

    下面就来 调用 我们 这个 demo1 包 中 的func方法 .

    在这里插入图片描述

    如果 我们 这样 导入 包 ,但 Main 这个 类 与我们 主 类 的 名字 重名了 就会出现问题 ,只能 指定 路径了 .

    在这里插入图片描述


    这样我们就 成功 的 调用 demo1 这个 包 中 Main 这个类 中的 func 方法.

    包访问权限


    下面我们来看 一下我们的 包 访问 权限

    还是 这张图 :

    在这里插入图片描述

    protected 会 在 继承 后 讲到 , 这里 就先 来 了解 其他 三个 .

    我们已经了解了类中的 public 和 private. private 中的成员只能被类的内部使用.

    如果某个成员变量不包含 public 和 private 关键字(不加任何的访问修饰限定词的时候), 这个成员变量就具有包的的权限,

    此时这个成员变量可以在包内部的其他类使用, 但是不能在包外部的类使用该成员变量

    演示:

    在这里插入图片描述

    如果 不在 同一个包 底下 呢 ?

    在这里插入图片描述

    可以看到我们 在 baidu 这个 包 底下创建 了 一个 Test 类 ,并 导入 了 demo1 这个 包中 的 Dog ,但我们 调用 Dog 类中的 字段 和 方法 时 报错了 ,这里 就 是

    包访问 权限 : 此时这个成员变量可以在包内部的其他类使用, 但是不能在包外部的类使用该成员变量.

    补充:
    常见的包(系统包)

    1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

    2. java.lang.reflect:java 反射编程包;

    3. java.net:进行网络编程开发包。

    4. java.sql:进行数据库开发的支持包。

    5. java.util:是java提供的工具程序包。(集合类等) 非常重要

    6. java.io:I/O编程开发包。

    下文 预告 : 继承 or 多态 .

  • 相关阅读:
    MySQL数据库——MySQL日志及分类
    基于SSM的学生(成绩)管理系统
    2023年中国大学生程序设计竞赛女生专场题解, K. RSP
    MyBatis注解开发实现学生管理页面(分页pagehelper,多条件搜索,查看课程信息)
    1. 懒加载的概念、特点和原理?
    自动化监控系统Prometheus&Grafana
    聊聊运行时监控方案
    iMazing 2.17.10官方中文版含2023最新激活许可证码
    海信电视U8“死磕”技术,家庭影音娱乐的体验突围
    Unity接入微信支付SDK 2022年版安卓篇
  • 原文地址:https://blog.csdn.net/mu_tong_/article/details/126213047